正则表达式在没有['']的情况下用括号查找变量

时间:2018-03-23 20:23:45

标签: php regex undefined constants

我试图从php 5.6升级到php 7.2。但我得到了很多“警告:使用未定义的常量”错误消息。

问题是我使用了例如遍布整个网站的$ variable [name]。 但我需要变量$''name']。

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

我得到了一个解决方案:

\[([a-zA-Z-_\s]+)\]

替换为:

['$1']

e.g。我不想匹配[测试]但想匹配$ variable [test] 例如不想匹配[1](数字int)但想匹配[1_2](与文本和数字组合)

对解决方案有任何建议的人?

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']

Live demo

答案 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