【问题标题】:preg_replace data between html tagspreg_replace html标签之间的数据
【发布时间】:2010-12-10 17:24:02
【问题描述】:

我正在尝试做一个 preg_replace 匹配 html 标签之间的数据。

这个模式很好用,但我不知道如何获取匹配字符串。

preg_replace("/(?<=>)[^><]+?(?=<)/", "$1",$string);

对正则表达式不太了解,我假设 $1 会返回匹配项,但事实并非如此。现在这个模式(上图)可以删除 html 标签之间的所有数据,如果我

preg_replace("/(?<=>)[^><]+?(?=<)/", "",$string);

我的主要目标是有一条线,我可以将返回的匹配项放在类似的函数中

preg_replace("/(?<=>)[^><]+?(?=<)/", string_function("$1"),$string);

【问题讨论】:

    标签: php regex


    【解决方案1】:

    您需要使用preg_replace_callback 来应用自定义函数。

    preg_replace 也不会返回任何我认为你需要 preg_match 的东西。

    【讨论】:

      【解决方案2】:

      对正则表达式不太了解,我假设 $1 会返回匹配项,但事实并非如此。

      使用"$0"。您没有捕获任何组,因此组 1 将不存在(意味着 $1 不会引用任何内容)。关于$0和朋友的更多信息,请参见preg_replace() docsreplacement参数的说明。

      我的主要目标是有一条线,我可以将返回的匹配项放在类似的函数中

      要对匹配的字符串运行函数,您应该改用preg_replace_callback()

      【讨论】:

        【解决方案3】:

        请改用preg_match()。方法签名如下:

        int preg_match ( string $pattern , string $subject [, array &amp;$matches [, int $flags = 0 [, int $offset = 0 ]]] )

        如果您传入matches 参数,那么它将被结果匹配填充。

        例如:

        preg_match("/(?<=>)[^><]+?(?=<)/", $string, $matches);
        print_r($matches);
        

        $matches 应该包含你想要的结果。

        【讨论】:

          猜你喜欢
          • 2011-07-18
          • 2015-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-01
          • 2013-09-16
          • 1970-01-01
          相关资源
          最近更新 更多