PHP变量可以是以下格式,可以包含字母数字和下划线:
$var_1
$var_1[key_1]
$var_1['key_1']
$var_1["key_1"]
$var_1[key_1][key_2]
$var_1['key_1']['key_2']
$var_1["key_1"]["key_2"]
$var_1->property_1
$var_1->property_1->property_2
数组和对象永远不会有超过2个嵌套元素。对象没有方法(即不需要$var_1->method_1()
)。
我需要一个RegEx匹配它们所有,或者最少数量的RegExes,它们会将它们转换为以下格式的HTML回送片段:
<?=$1?>
其中$1
是整个匹配的字符串。如果可以将常量添加到同一个RegEx中,那将是完美的:
CONST_1 into <?=CONST_1?>
答案 0 :(得分:2)
这应该针对给定的例子进行:
\$\w+(?:\[(["']|)\w+\1\]|->\w+){0,2}
将其替换为<?=$0?>
(请务必使用0
,因为1
是第一次捕获,而不是整个匹配。我没有包含常量,因为我觉得这很棘手(你怎么知道它是常量而不是保留关键字 - 包括所有关键字?)。
正则表达式的解释:
\$ # literal $
\w+ # letters, digits, underscores
(?: # subpattern to match indexing or a member
\[ # literal [
(["']|) # a ', a " or nothing (capture it in group 1)
\w+ # letters, digits, underscores
\1 # the correct matching closing delimiter
\] # literal ]
| # or
-> # literal ->
\w+ # letters, digits, underscores
){0,2} # end of subpattern, repeat 0 to 2 times
请注意,如果您在PHP中使用此模式,则可能必须转义'
。