【问题标题】:Regex $1, $2, etc正则表达式 $1、$2 等
【发布时间】:2011-05-30 21:20:39
【问题描述】:

我一直在尝试在 PHP 中做一些正则表达式操作,但我在这方面不是很熟练。似乎当我在字符串上使用像 preg_replace 这样的正则表达式函数时,我可以通过名为 $1、$2 等的某种变量访问正则表达式替换的字符串。这叫什么?如何使用?

【问题讨论】:

    标签: php regex variables


    【解决方案1】:

    它们被称为反向引用并匹配正则表达式中的分组元素。

    如果您将正则表达式的一部分用括号括起来,那么您可以在替换部分中引用它(或者实际上稍后在同一个正则表达式中,通过与其位置相对应的反向引用。

    斜线形式或美元形式可用于替换:

    \1, \2 == $1, $2
    

    【讨论】:

      【解决方案2】:

      这些在正则表达式术语中称为反向引用(更多关于here)。您可以使用它们在您的正则表达式或替换字符串中引用捕获组(或子模式,由() 包围)。

      一个例子:

      /* 
       * Replaces abcd123 with 123abcd, or asdf789 with 789asdf.
       * 
       * The $1 here refers to the capture group ([a-z]+),
       * and the $2 refers to the capture group ([0-9]+).
       */
      preg_replace('/([a-z]+)([0-9]+)/', '$2$1', $str);
      

      【讨论】:

      • 这很有帮助!但我认为变量不会以单引号扩展,但在我测试它时它可以工作。这是为什么呢?
      • 作为 PCRE 反向引用,它们恰好用$ 表示,但与 PHP 变量无关。它们被正则表达式引擎而不是 PHP 看到和取代。
      • 好的,有道理。非常感谢!
      • 感谢您提供正确的“术语;”将来我可能需要查一下,这个术语在所有编程语言和环境中都很有用:)
      • 这是一个完美的答案,很好的例子,并且用非常短的文字很好地描述了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 2010-10-08
      • 2010-09-07
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 2011-04-27
      相关资源
      最近更新 更多