Regex для поиска и замены ключей массива - PullRequest
0 голосов
/ 06 ноября 2019

Мне нужно регулярное выражение, чтобы найти это: $ var [prod_menu]

и заменить на это: $ var ['prod_menu']

В данный момент мое регулярное выражение делает это: $ var['rod_men']

Мое регулярное выражение:

preg_replace('/\[[^\'](.*)[^\']\]/U', '['$1']', $input_lines);

Где ошибка?

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Вы должны начать группу захвата после открытия [ и закрыть до ]

Обратите внимание, что эта часть в вашем шаблоне [^\'](.*)[^\'] использует 2 раза отрицательный класс символов, который фактически ожидает минимумиз 2 символов.

Другим способом написания шаблона может быть использование отрицательного класса символов, не соответствующего [, ], $ или '

\[([^]\[$']+)\]

Regex demo

В качестве замены используйте

['$1']

Или сделайте соответствие более ограничивающему соответствию 1+ словам символов.

\[(\w+)\]

Regex demo

1 голос
/ 06 ноября 2019

Просто измените свою группу захвата, чтобы включить дополнительные символы в начале и в конце ...

preg_replace('/\[([^\'].*[^\'])\]/U', "['$1']", $input_lines);

(я также исправил проблему с кавычками в '['$1']').

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