【问题标题】:PHP regex - having trouble writing a regex expression to match multiple specific patterns at oncePHP 正则表达式 - 编写正则表达式以一次匹配多个特定模式时遇到问题
【发布时间】:2014-04-05 23:38:02
【问题描述】:

我在 PHP 脚本中使用 file_get_contents() 以使用 preg_match_all() 按出现顺序自动列出变量名称,然后使用 array_filter() 按首次出现过滤它们。我需要能够捕获以下格式的变量(其中任何变量名称都包含字符[a-zA-Z_-\d]):

//standard variables
$variable

到目前为止,我已经编写了一个简单的正则表达式,它符合我对这个独立变量的所有要求:[a-zA-Z_-\d]

//arrays
$array[0]
$array2[$key]

//form and session variables
$_GET['frm']
$_SESSION['user']
$_POST[$var]
etc...

我已经尝试自己处理数组和(表单/会话)变量,并且得到了 ([$][a-zA-Z_-\d]+\[?\'?[$]?[a-zA-Z_-\d]+\'?\]?) 的表达式,请参阅 http://regex101.com/r/dO8tI2 以了解我是如何做到这一点的。但是我现在正在捕捉我不想要的东西(而且我不确定如何调整这个......) - 即匹配 7 上的括号,我如何只选择文本 $test 而不是 $test]如果没有开始[。 - 变量变量也以此类推...

//variable variables
${$var."a"}
${$var.$var2}
${"a"."b"}
${$var."a".$var3}
etc...

如果在上面的示例中使用了字符“,那么也需要接受字符 '。

由于我对正则表达式相当陌生,并且在我的表达式步骤中被困在上面的超链接点,有人可以编写一个符合上述标准的单个正则表达式并简要解释它是如何工作的吗?

我尝试过使用 OR | 运算符和未捕获组(?; 条件...),但我正在绕圈子。

【问题讨论】:

    标签: php regex variables file-get-contents


    【解决方案1】:

    我想出了以下符合您要求的正则表达式:

    (\$[a-zA-Z_-\d]+(\[('[^']+'|\$?[a-zA-Z_-\d]+)\])?)
    

    解释:

    1. \$ :从字面上理解$
    2. [a-zA-Z_-\d]+ :后跟一个或多个字母数字字符或破折号或下划线。
    3. (\[('[^']+'|\$?[a-zA-Z_-\d]+)\])? :后跟零个或一个以[ 开头并以] 结尾的字符串,括号之间的字符串匹配'[^']+' OR \$?[a-zA-Z_-\d]+。让我们分解这两个子字符串:
      • '[^']+' :匹配单引号之间的任何字符串。
      • \$?[a-zA-Z_-\d]+ :匹配任意以$ 开头并包含一个或多个字母数字字符、短划线和下划线的字符串。

    【讨论】:

      猜你喜欢
      • 2012-07-11
      • 2020-10-10
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      相关资源
      最近更新 更多