PHP: определить регулярность регулярного выражения важности - PullRequest
1 голос
/ 18 апреля 2011

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

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

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

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

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

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

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

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

1 Ответ

2 голосов
/ 18 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...