RegEx将PHP变量转换为HTML echo片段

时间:2012-12-07 19:24:00

标签: php regex

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?>

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中使用此模式,则可能必须转义'