PHP: Определить порядок важности регулярных выражений

#php #regex #string

#php #регулярное выражение #строка

Вопрос:

Я столкнулся с проблемой в подсветке синтаксиса, над которой я работал. PHP поддерживает строки, содержащиеся между "" и '' . В отличие от C #, которым легче управлять, только разрешая "" , с опцией @ автоматического экранирования строки.

Если у меня есть две строки, вот так:

 $code = "print( "<div class='test'>content?div><div class='test'>content</div>" );";
  

Если я повторю $ code, я получу:

 print( "<div class='test'>content?div><div class='test'>content</div>" );
  

Вот моя проблема. Когда я анализирую содержимое между начальной и конечной цитатами, я удаляю такое содержимое, чтобы поместить его обратно позже (чтобы не выделять перекрестно), используя инструмент буфера обмена (просто скопируйте и вставьте). Я настроил его на разбор содержимого между '' первым использованием регулярных выражений. Конечный результат (после обоих типов строк) будет выглядеть следующим образом:

 print( "<div class=>content?div><div class=>content</div>" );
  

Как я могу изменить свое регулярное выражение, чтобы смотреть назад (от начала) и вперед (от конца), чтобы искать самый верхний разделитель строк ( ' или " ). Это трудно объяснить, надеюсь, кто-нибудь это поймет, иначе мне просто придется с этим жить.

Ответ №1:

Это невозможно с регулярными выражениями; они недостаточно мощны, чтобы справиться с рекурсией. Они не могут правильно закрыть вложенные круглые скобки, они не могут правильно закрыть вложенные кавычки. Вам нужны нажимные автоматы (или контекстно-свободный язык), по крайней мере, для такого рода функциональности.