1

PHP vars 可以是以下格式,并且可以包含字母数字和下划线:

$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()不需要)。

我需要一个匹配它们的则表达式,或者最少数量的几个正则表达式,它将它们转换为以下格式的 HTML 回显片段:

<?=$1?>

$1整个匹配的字符串在哪里。如果可以将常量添加到同一个 RegEx 中,那将是完美的:

CONST_1 into <?=CONST_1?>
4

1 回答 1

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

于 2012-12-07T19:28:29.427 回答