【发布时间】:2011-05-30 21:20:39
【问题描述】:
我一直在尝试在 PHP 中做一些正则表达式操作,但我在这方面不是很熟练。似乎当我在字符串上使用像 preg_replace 这样的正则表达式函数时,我可以通过名为 $1、$2 等的某种变量访问正则表达式替换的字符串。这叫什么?如何使用?
【问题讨论】:
我一直在尝试在 PHP 中做一些正则表达式操作,但我在这方面不是很熟练。似乎当我在字符串上使用像 preg_replace 这样的正则表达式函数时,我可以通过名为 $1、$2 等的某种变量访问正则表达式替换的字符串。这叫什么?如何使用?
【问题讨论】:
它们被称为反向引用并匹配正则表达式中的分组元素。
如果您将正则表达式的一部分用括号括起来,那么您可以在替换部分中引用它(或者实际上稍后在同一个正则表达式中,通过与其位置相对应的反向引用。
斜线形式或美元形式可用于替换:
\1, \2 == $1, $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);
【讨论】:
$ 表示,但与 PHP 变量无关。它们被正则表达式引擎而不是 PHP 看到和取代。