Php 正则表达式查找带括号且不带[';';]的变量
我正在尝试从PHP5.6升级到PHP7.2。但是我收到了很多“警告:使用未定义常量”的错误消息 问题是,我在整个网站上都使用了例如$variable[name]。 但我需要是$variable['name'] 我尝试使用正则表达式,但问题是它匹配我不想匹配的东西 我得到了一个折中方案: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](与文本和数字
\[([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']
。检查演示我们讨论了多少行代码?主要问题是:如果您的代码包含常量怎么办?我认为更新旧代码(为以前的版本设计)的唯一好方法是:重写它。