首页 > 解决方案 > 正则表达式纠正 php 代码 - 替换字符串,不包括某些情况

问题描述

我正在审查我的旧 php 软件,我需要做一些一般性的更正。我正在尝试通过正则表达式自动执行其中一些,但在某些情况下没有成功。我使用 Netbeans。

我需要全部替换:

$line[word_test]

$line['word_test']

不包括 word_test 是 var(即 $abc)或数字或包含字符串“const”的情况

我尝试了几个正则表达式

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

但没有成功。我需要正则表达式在“包含文本”字段中写入,并且在 Netbeans 替换功能的“替换为”字段中写入。

标签: phpregexnetbeans

解决方案


一种选择是使用带有负前瞻的捕获组。

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

解释

  • (\$line\[)捕获组 1,匹配$line[
  • (?!负前瞻,断言直接向右的不是
    • \d|\$\w|[^\]]*const匹配一个数字,$后跟一个单词 char 或const
  • )关闭前瞻
  • ([^\]]+)捕获组 2,匹配任何字符,除了]
  • (\])捕获第 3 组,匹配]

正则表达式演示

在替换中使用 3 个捕获组

$1'$2'$3

如果@Nigel Ren$line['word_test1']在评论中指出已经存在格式,您可以扩展否定前瞻:

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

正则表达式演示


推荐阅读