【问题标题】:How can I get at the matches when using preg_replace in PHP?在 PHP 中使用 preg_replace 时如何获得匹配项?
【发布时间】:2010-09-05 07:55:12
【问题描述】:

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

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

【问题讨论】:

    标签: php regex html-parsing preg-replace


    【解决方案1】:

    你需要把模式放在括号里/([A-Z])/,像这样:

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

    【讨论】:

    • @Gumbo:回答你自己的问题是完全可以的,甚至鼓励,只要问题不与网站上的另一个问题重复。
    • 替换字符串中的$1 位是我需要的。谢谢!
    【解决方案2】:

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

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

    与往常一样,您可以前往php.net/preg_replace 或 php.net/ 快速搜索文档。引用文档:

    \0 或 $0 指的是整个模式匹配的文本。

    【讨论】:

      【解决方案3】:

      在您想要的捕获周围使用括号。

      【讨论】:

        【解决方案4】:

        来自 php.net 上的preg_replace documentation

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

        参见 Flubba 的示例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-28
          • 2014-05-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多