Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2021, 14:47   #1
TeeKO
Новичок
Джуниор
 
Регистрация: 19.03.2021
Сообщений: 1
По умолчанию Php регулярные выражения

Добрый день! Только начал изучать Регулярные выражения, прошу совета. Задача, в принципе, простая но уже вторую неделю никак не получается ее решить.

Задача:
Найти в тексте из примера все числа в квадратных скобках:
1) Числа, которые больше нуля
2) Группы чисел, написанные через запятую найти отдельно
3) Число-число считать одним числом
Все должно выполняться одним регулярным выражением.

Вот пример текста:"
ОБОСНОВАНИЕ
По данным на 16 сентября 2020 г., общее число заражённых COVID-19 во всём мире составило 29 155 581 человек, включая 926 544 летальных исхода [ 1 ]. Влияние окончания периода летних отпусков и возобновления работы учебных заведений на течение эпидемии ещё не проявилось в полной мере. Тем не менее если ситуация будет развиваться по сценарию интенсивного распространения инфекции, существует вероятность возникновения второй волны [ 2, 3,4 - 7 ]. С ростом числа новых случаев Израиль стал первой развитой страной, которая возобновила общенациональный карантин [3]. В Москве впервые с 30 июня 2020 г. регистрируется устойчивый рост числа случаев заражения инфекцией SARS-CoV-2.

Прогнозируемая нагрузка на систему здравоохранения в связи с эпидемией может быть оптимизирована благодаря эффективным и безопасным инструментам сортировки пациентов, помогающим решить вопросы о необходимости госпитализации или проведения дообследования. Ряд лабораторных параметров, таких как определение вирусной нагрузки методом полимеразной цепной реакции с обратной транскрипцией (ОТ-ПЦР) [4-5], подсчёт количества тромбоцитов [5], содержание D-димера в крови [6] и другие [ -7], позволяют оценивать стадию и тяжесть заболевания. Однако основным проявлением, влияющим на течение заболевания, является респираторная симптоматика. Это делает исследование лёгких при помощи компьютерной томографии (КТ) и ультразвукового исследования (УЗИ) одним из ключевых методов определения тяжести состояния пациента [8-10, 11, 12-13 ]. КТ обладает высокой чувствительностью для обнаружения признаков поражения лёгочной ткани, ассоциированных с COVID-19 [9, 10]. В связи с этим ряд экспертов рассматривает КТ в качестве диагностического стандарта для этого заболевания: в частности, в период московского карантина КТ стал одним из ключевых инструментов диагностики и сортировки пациентов [10]. К сожалению, КТ не является широкодоступным методом, а также обладает лучевой нагрузкой. УЗИ лёгких способно компенсировать данные недостатки, являясь общедоступным, мобильным и безопасным подходом. Это делает его особенно актуальным для применения у беременных женщин, детей и тяжелобольных лежачих пациентов. Возможность применения УЗИ лёгких при COVID-19 исследовали в недавних систематических обзорах [11, 12]. Однако на сегодняшний день имеющихся научных данных недостаточно для того, чтобы чётко очертить его функциональность для принятия клинических решений в зависимости от тяжести заболевания [13,14].

Для оценки чувствительности и специфичности УЗИ при различных степенях поражения изучили опубликованные работы, посвящённые сравнению УЗИ и КТ лёгких у пациентов с COVID-19.

МЕТОДЫ
Данная работа написана в соответствии с принципами PRISMA в отношении качества представления информации о результатах систематических обзоров и метаанализов работ, посвящённых оценке медицинских вмешательств [14]
."

Опробую я это все при помощи сайта : https://regex101.com/ с настройкой PCRE2 (PHP>=7.3)...

Вот до чего дошел сам:
(\[\s{1,10}\d\s{1,10}\])
(\[\s{1,10}\d.\s{1,10}\d.\d\s{1,10}.\s {1,10}\d\s{1,10}\])
(\[\d{1,10}\])
(\[\d.{0,10}\])
(\[.{1,20}\]) - находит вообще все числа

\[.{1,20}\] -находит все диапазоны со скобочками в тексте очень грубо ( не надежно) жадный
\[.*?\] - все диапазоны ленивый

[ 1 ]
[ 2, 3,4 - 7 ]
[3]
[4-5]
[5]
[6]
[ -7]
[8-10, 11, 12-13 ]
[9, 10].
[10]
[11, 12]
[13,14]
[14]

\d[1-9]- любое число от 1до 9


var pattern = /^[1-9]\d*$/; //если не считать 0..015 за число 15
var pattern = /^0*[1-9]\d*$/; //если считать 0..015 за число 15

\d(?=\])- любое число только если после него идет знак ]

x(?!y) - Соответствует 'x' только если за 'x' не следует 'y'. Это называется отрицательное упреждение.

Например, /\d+(?!\.)/ соответствует числу только если за ним не следует десятичная точка.
Регулярное выражение /\d+(?!\.)/.exec("3.141") сопоставит '141' но не '3.141'.

Новый апдейт: \d(?=[\],\s\-\d{1,9}])
\d{1,9}(?=[\],{1,9}\s{1,9}\-{1,9}\d{1,9}])

\d{1,9}(?=[\],{1,9}\s{1,9}\-{1,9}\d{1,9}\.])

\d{1,9}(?=[\],{1,9}\s{1,9}\-{1,9}])

\d+(?=[\],+\s+\-+\d+\.+])

Поехали дальше...
Найти в тексте из примера все числа в квадратных скобках:
\d+(?=\])
Все числа, которые больше нуля в квадратных скобках:
\[1-9]*(?=\])
Группы чисел, написанные через запятую найти отдельно
\d*(?=[,])
Число-число считать одним числом
\d[1-9]*-\d[0-9]* либо так: [1-9]{1,9}-[0-9]{1,9}

Но, все равно, полученное выражение не отвечает поставленной задаче. Прошу помочь, или хотя бы подсказать где искать ответ. Что я делаю не так?
TeeKO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения(в PHP) kata.m Помощь студентам 4 03.05.2016 19:46
PHP - регулярные выражения. SoftKoc PHP 12 27.10.2012 14:21
Регулярные выражения в PHP ZET78 PHP 1 31.10.2010 20:51
Регулярные выражения PHP russian-stalker PHP 8 11.04.2010 17:46
Регулярные выражения. (PHP) slavec PHP 1 10.03.2010 20:59