|
Сферический конь в вакууме #3 (регулярное выражение)
|
|||
---|---|---|---|
#18+
(php 7.4) Вот простейшее регулярное выражение с условным шаблоном и относительной ссылкой. Условный шаблон (?(-1)B|D) работает так: если захвачена предыдущая (-1) подмаска (A), то захватывается B, иначе D. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Далее заключаем шаблон в конструкцию (?:\s*...)+ -для захвата всей последовательности фрагментов: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Но получаем тот же результат. В условном шаблоне обратная ссылка работать перестала. Почему ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 15:50 |
|
Сферический конь в вакууме #3 (регулярное выражение)
|
|||
---|---|---|---|
#18+
Объяснение простое: конструкция (?:\s*...)+ должна выполнить две итерации, чтобы захватить сразу оба фрагмента. На первой итерации предыдущая подмаска (-1) непуста - анализируется и захватывается фрагмент A 555 B . На второй итерации предыдущая подмаска (-1) снова непуста, т.к. она уже была сформирована на первой итерации. В итоге на второй итерации проверяется фрагмент C ... B (а не C ... D ), но такого фрагмента нет и в первое найденное вхождение по-прежнему помещается только A 555 B . И решить сабжевую задачу одним условным шаблоном невозможно. P.S . Такое ощущение, что сам с собой беседую... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 22:14 |
|
|
start [/forum/topic.php?fid=23&tid=1459572]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 273ms |
total: | 417ms |
0 / 0 |