preg_replace html标签之间的数据

时间:2010-12-10 17:24:03

标签: php regex

我正在尝试使用匹配html标记之间数据的preg_replace。

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

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

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

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

我的主要目标是有一条线,我可以通过像

这样的函数放回返回的匹配
preg_replace("/(?<=>)[^><]+?(?=<)/", string_function("$1"),$string);

3 个答案:

答案 0 :(得分:1)

您需要使用preg_replace_callback来应用自定义功能。

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

答案 1 :(得分:0)

  

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

使用"$0"。您没有捕获任何组,因此组1将不存在(意味着$1将不会引用任何内容)。有关replacement和朋友的详情,请参阅preg_replace() docs$0参数的说明。

  

我的主要目标是有一条线,我可以通过像

这样的函数放回返回的匹配

要在匹配的字符串上运行函数,您应该使用preg_replace_callback()代替。

答案 2 :(得分:0)

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

  

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

如果您传入matches参数,则会填充所产生的匹配项。

E.g:

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

$matches应包含您想要的结果。