我试图从php 5.6升级到php 7.2。但我得到了很多“警告:使用未定义的常量”错误消息。
问题是我使用了例如遍布整个网站的$ variable [name]。 但我需要变量$''name']。
我试图使用正则表达式,但问题是匹配我不想匹配的东西。
我得到了一个解决方案:
\[([a-zA-Z-_\s]+)\]
替换为:
['$1']
e.g。我不想匹配[测试]但想匹配$ variable [test] 例如不想匹配[1](数字int)但想匹配[1_2](与文本和数字组合)
对解决方案有任何建议的人?
答案 0 :(得分:2)
根据PHP basics:
有效的变量名称以字母或下划线开头,后跟 任意数量的字母,数字或下划线。作为一个常规 表达,它将表达如下:
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
将此与\K
一起使用(匹配重置器,而不是必须),您可以这样做:
\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\[\K([^]'"]+)\]
^^^^^^^^^^^^^
最后一部分细分:
\K
重置匹配(
开始捕获组#1
[^]'"]+
确保引号不显示,与结束括号相匹配)
CG#1结束]
匹配结束括号然后替换为:
'$1']
答案 1 :(得分:1)
您需要THIS?
$variable[name]
有了这个,您可以匹配任何$1
并使用[]
来获取价值。
注意:请注意,因为您可以拥有内部
name
变量,对象或整数。您必须为匹配类型进行额外检查/\$[a-z0-9_]+\[([a-z0-9\-\_\.]+)\]/gi
。
另一个好的解决方案是只匹配字符串名称。
>names(df)
[1] Student.ID
[2] State.ID
[3] "X2.MD.A.1.Select.and.Use.Appropriate.Tools.to.Measure.Length.Percent.Correct"
[4] "X2.MD.A.3.Estimate.Length.Percent.Correct"
[5] "X2.MD.A.4.Measurement.Difference.Percent.Correct"
[6] "X2.MD.B.5.Addition.and.Subtraction.Word.Problems..Lengths.Percent.Correct"
[7] "X2.NBT.A.1.Understand.Place.Value.Percent.Correct"
[8] "X2.NBT.A.1.a.Understand.Place.Value..Bundles.of.Tens.Percent.Correct"
[9] "X2.NBT.A.1.b.Understand.Place.Value..Bundles.of.Hundreds.Percent.Correct"
[10] "X2.NBT.A.3.Read.and.Write.Numbers.to.1.000.Percent.Correct"
通过这种方式,您可以得到您所需要的。 DEMO