Ваше побег немного сбит. Похоже, вы используете JavaScript, а строковый литерал "\$(_POST|_SESSION|_GET)\[([^\'][0-9a-zA-Z _]+?[^\'])\]"
оценивается как $(_POST|_SESSION|_GET)[([^'][0-9a-zA-Z _]+?[^'])]
.
Вместо этого вы должны использовать "\\$(_POST|_SESSION|_GET)\\[([^'][0-9a-zA-Z _]+?[^'])\\]"
, который оценивает \$(_POST|_SESSION|_GET)\[([^'][0-9a-zA-Z _]+?[^'])\]
.
Причина в том, что на самом деле у вас есть два уровня синтаксического анализа, каждый со своими собственными правилами экранирования. Во-первых, у вас есть строковый литерал JavaScript, который позволяет экранировать такие вещи, как \n
для новой строки. Тем не менее, нераспознанные escape-последовательности, такие "\["
как "молча" проглатываются и производят [
. Движок регулярных выражений видит [
, указывая начало класса персонажа.
Вы хотите, чтобы механизм регулярных выражений получал буквальные обратные слеши в шаблоне. Для этого вы должны сначала создать строку JS, содержащую буквенные обратные косые черты. Это означает, что вы должны избегать обратной косой черты в строковом литерале, поэтому "\\"
производит \
, например, "\\["
производит строку \[
. Таким образом, механизм регулярных выражений видит \[
, указывая на экранированную (буквальную) скобку.
Другое дело, что одиночные кавычки вообще не нужно экранировать, поскольку они не имеют специального значения в регулярном выражении, а одиночные кавычки внутри строки в двойных кавычках обрабатываются JS как обычные символы.
Есть еще один вариант, но я не уверен, что DreamWeaver его примет. JavaScript имеет специальный синтаксис регулярных выражений, поэтому вам не нужно сначала создавать строку. Пропустив этот дополнительный шаг разбора, вы фактически избегаете необходимости двойного выхода. Литерал регулярного выражения JS имеет форму /pattern/options
(косые черты необходимо экранировать, но в этом шаблоне их нет). Таким образом, ваш шаблон может быть выражен как /\$(_POST|_SESSION|_GET)\[([^'][0-9a-zA-Z _]+?[^'])\]/
. Еще раз, одинарные кавычки не нужно вообще избегать.
Если DreamWeaver поддерживает литеральный синтаксис regex, это на самом деле предпочтительный вариант.