Как заставить » » и «*» работать внутри lookahead регулярного выражения

#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 в регулярном выражении, а не просто игра с символами…