#php #regex #lookahead
#php #регулярное выражение #предварительный просмотр
Вопрос:
Теперь у меня возникли проблемы с регулярным выражением внутри предпросмотра в формуле регулярных выражений. В частности, учитывая строку:
"hello" world
тогда следующее регулярное выражение, похоже, не работает:
(?<="w " )world
Итак, как я мог бы использовать формулу регулярных выражений, чтобы уловить только «мир»?
Ответ №1:
Регулярное выражение в вашем примере ( (?<="w " )world
) является предысторией, а не предвидением. Большинство языков, включая PHP, не поддерживают регулярные выражения нефиксированной длины в предпросмотре.
Вместо этого вы могли бы написать регулярное выражение типа "w " (world)
и извлечь значение первой группы захвата. Хотя в этом примере регулярное выражение кажется излишним…
Комментарии:
1. Да, вы знаете, это всего лишь короткий пример для моей идеи. Итак, спасибо вам за вашу информацию о том, что <pre> Большинство языков, включая PHP, не поддерживают регулярные выражения нефиксированной длины в предпросмотре</pre>
Ответ №2:
Когда я проверил ваше регулярное выражение на игровой площадке регулярных выражений, оно показало некоторую ошибку в ‘?<=’. Затем я изменил ваше регулярное выражение на
(?*<*=*"*w "* )world
это совпало с тестовым примером «hello» world.
Первая проблема, вам нужно использовать » перед ‘?’
Другие о * и : * требуют совпадения 0 или более, требуют совпадения 1 или более. Итак, используйте * после слов, которые можно пропустить, а для слов нельзя.
Протестируйте свое регулярное выражение и поймите, что означает формула в:https://regexr.com /
Комментарии:
1. Вы знаете, это проблема с lookbehind в регулярном выражении, а не просто игра с символами…