powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сферический конь в вакууме #3 (регулярное выражение)
2 сообщений из 2, страница 1 из 1
Сферический конь в вакууме #3 (регулярное выражение)
    #40011272
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(php 7.4) Вот простейшее регулярное выражение с условным шаблоном и относительной ссылкой.
Условный шаблон (?(-1)B|D) работает так: если захвачена предыдущая (-1) подмаска (A), то захватывается B, иначе D.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
preg_match_all('/(?:(A)|C)\d*(?(-1)B|D)/iu', 'A555B C777D', $matches, PREG_SET_ORDER);
Array (
    [0] => Array
        (
            [0] => "A555B"
            [1] => "A"
        )
    [1] => Array
        (
            [0] => "C777D"
        )
)


Далее заключаем шаблон в конструкцию (?:\s*...)+ -для захвата всей последовательности фрагментов:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
preg_match_all('/(?:\s*(?:(A)|C)\d*(?(-1)B|D))+/iu', 'A555B C777D', $matches, PREG_SET_ORDER);
Array (
    [0] => Array
        (
            [0] => "A555B"
            [1] => "A"
        )
    [1] => Array
        (
            [0] => "C777D"
        )
)

Но получаем тот же результат.
В условном шаблоне обратная ссылка работать перестала. Почему ?
...
Рейтинг: 0 / 0
Сферический конь в вакууме #3 (регулярное выражение)
    #40012384
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объяснение простое: конструкция (?:\s*...)+ должна выполнить две итерации, чтобы захватить сразу оба фрагмента. На первой итерации предыдущая подмаска (-1) непуста - анализируется и захватывается фрагмент A 555 B . На второй итерации предыдущая подмаска (-1) снова непуста, т.к. она уже была сформирована на первой итерации. В итоге на второй итерации проверяется фрагмент C ... B (а не C ... D ), но такого фрагмента нет и в первое найденное вхождение по-прежнему помещается только A 555 B .

И решить сабжевую задачу одним условным шаблоном невозможно.
P.S . Такое ощущение, что сам с собой беседую...
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сферический конь в вакууме #3 (регулярное выражение)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]