在PHP中使用preg_replace时如何获得匹配?

Pol*_*nby 53 php regex preg-replace html-parsing

我试图抓住几个单词的大写字母并将它们包裹在span标签中.我使用preg_replace进行提取和包装,但它没有输出任何东西.

preg_replace("/[A-Z]/", "<span class=\"initial\">$1</span>", $str)
Run Code Online (Sandbox Code Playgroud)

Pol*_*nby 52

您需要将模式放在括号中/([A-Z])/,如下所示:

preg_replace("/([A-Z])/", "<span class=\"initial\">$1</span>", $str)
Run Code Online (Sandbox Code Playgroud)

  • @Gumbo:只要问题与网站上的另一个问题不重复,回答你自己的问题就完全没问题,甚至是鼓励的. (8认同)

Joh*_*hat 29

\0 也将匹配整个匹配的表达式,而不使用括号进行显式捕获.

preg_replace("/[A-Z]/", "<span class=\"initial\">\\0</span>", $str)
Run Code Online (Sandbox Code Playgroud)

与往常一样,您可以访问php.net/preg_replace或php.net/<whatever search term>来快速搜索文档.说明文件:

\ 0或$ 0表示整个模式匹配的文本.


Wed*_*dge 8

从php.net上的preg_replace文档:

替换 可能包含形式的引用\n或(自PHP 4.0.4起)$ n,后一种形式是首选形式.每个这样的引用将被第n个带括号的模式捕获的文本替换.

见Flubba的例子.


Din*_*nah 5

在所需的捕获周围使用括号.