Regex для исправления кода php - строка подстановки исключая некоторые случаи - PullRequest
0 голосов
/ 04 апреля 2020

Я проверяю мое старое php программное обеспечение, и мне нужно внести некоторые общие исправления. Я пытаюсь сделать некоторые из них автоматически с помощью регулярных выражений, но в некоторых случаях безуспешно. Я использую Netbeans.

Мне нужно заменить все:

$line[word_test]

на

$line['word_test']

, исключая случай, когда word_test является переменной (т. Е. $ Ab c ) или число или содержит строку "const"

Я пробовал с несколькими регулярными выражениями, такими как

\$line\[[^'|\$|constan](.*)\]

, но безуспешно. Мне нужно и регулярное выражение для записи в поле «Содержащий текст», и то, что для записи в поле «Заменить на» Netbeans заменяет функциональность.

1 Ответ

2 голосов
/ 04 апреля 2020

Один из вариантов - использовать группу захвата с отрицательным прогнозом.

(\$line\[)(?!\d|\$\w|[^\]]*const)([^\]]+)(\])

Пояснение

  • (\$line\[) Группа захвата 1, соответствует $line[
  • (?! Отрицательный взгляд вперед, утверждают, что то, что прямо направо, не
    • \d|\$\w|[^\]]*const Соответствует либо di git, $, за которым следует слово char, либо const
  • ) Закрыть взгляд вперед
  • ([^\]]+) Группа захвата 2, сопоставить любой символ, кроме ]
  • (\]) Группа захвата 3 , матч ]

Regex demo

При замене используйте 3 группы захвата

$1'$2'$3

В случае, если есть уже существующий формат $line['word_test1'] как @ Найджел Рен указывает в комментарии, вы можете расширить отрицательный прогноз:

(\$line\[)(?!'.*?'\]|\d|\$\w|[^\]]*const)([^\]]+)(])

Regex demo

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