Php 正则表达式查找带括号且不带[';';]的变量

Php 正则表达式查找带括号且不带[';';]的变量,php,regex,undefined,constants,Php,Regex,Undefined,Constants,我正在尝试从PHP5.6升级到PHP7.2。但是我收到了很多“警告:使用未定义常量”的错误消息 问题是,我在整个网站上都使用了例如$variable[name]。 但我需要是$variable['name'] 我尝试使用正则表达式,但问题是它匹配我不想匹配的东西 我得到了一个折中方案: \[([a-zA-Z-_\s]+)\] 替换为: ['$1'] e、 g.我不想匹配[test],但想匹配$variable[test] e、 g.不想匹配[1](数字整数),但想匹配[1_2](与文本和数字

我正在尝试从PHP5.6升级到PHP7.2。但是我收到了很多“警告:使用未定义常量”的错误消息

问题是,我在整个网站上都使用了例如$variable[name]。 但我需要是$variable['name']

我尝试使用正则表达式,但问题是它匹配我不想匹配的东西

我得到了一个折中方案:

\[([a-zA-Z-_\s]+)\]
替换为:

['$1']
e、 g.我不想匹配[test],但想匹配$variable[test] e、 g.不想匹配[1](数字整数),但想匹配[1_2](与文本和数字组合)

有人对解决方案有什么建议吗?

您需要什么

使用此选项,您可以匹配任何
$variable[name]
,并使用
$1
获取值

注意:请小心,因为您可以在
[]
变量、对象或整数中使用。您必须对匹配的类型进行额外检查,以便
名称

另一个好的解决方案是只匹配字符串名

/\$[a-z0-9_]+\[([a-z0-9\-\_\.]+)\]/gi
有了这个,你就可以得到你所需要的

你需要什么

使用此选项,您可以匹配任何
$variable[name]
,并使用
$1
获取值

注意:请小心,因为您可以在
[]
变量、对象或整数中使用。您必须对匹配的类型进行额外检查,以便
名称

另一个好的解决方案是只匹配字符串名

/\$[a-z0-9_]+\[([a-z0-9\-\_\.]+)\]/gi
有了这个,你就可以得到你所需要的

根据:

有效的变量名以字母或下划线开头,后跟 任意数量的字母、数字或下划线。作为常客 表达式,则可以这样表示:
[a-zA-Z\ux7F-\xff][a-zA-Z0-9\ux7F-\xff]*

将其与
\K
(匹配重置器,不是必须的)一起使用,您可以执行以下操作:

\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\[\K([^]'"]+)\]
                                            ^^^^^^^^^^^^^
最后一部分细分:

  • \K
    重置匹配
  • 开始捕获组#1
    • [^]'“]+
      确保不出现引号,与右括号匹配
  • CG的结尾#1
  • ]
    匹配右括号
然后替换为:

'$1']

根据:

有效的变量名以字母或下划线开头,后跟 任意数量的字母、数字或下划线 表达式,则可以这样表示:
[a-zA-Z\ux7F-\xff][a-zA-Z0-9\ux7F-\xff]*

将其与
\K
(匹配重置器,不是必须的)一起使用,您可以执行以下操作:

\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\[\K([^]'"]+)\]
                                            ^^^^^^^^^^^^^
最后一部分细分:

  • \K
    重置匹配
  • 开始捕获组#1
    • [^]'“]+
      确保不出现引号,与右括号匹配
  • CG的结尾#1
  • ]
    匹配右括号
然后替换为:

'$1']

更严格地应用规则
\$[a-zA-Z\ux7f-\xff][a-zA-Z0-9\ux7f-\xff]*\[\K([^'\]]+)\]
然后替换为
'$1']
。检查演示我们讨论的代码行数?主要问题是:如果代码包含常量怎么办?我认为更新旧代码(为以前版本设计)的唯一好方法难的是:重写它。更严格地应用规则
\$[a-zA-Z\ux7f-\xff][a-zA-Z0-9\ux7f-\xff]*\[\K([^'\]+)\]
,然后替换为
'$1']
。检查演示我们讨论了多少行代码?主要问题是:如果您的代码包含常量怎么办?我认为更新旧代码(为以前的版本设计)的唯一好方法是:重写它。