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