我正在尝试使用匹配html标记之间数据的preg_replace。
这种模式效果很好,但我不知道如何获取匹配字符串。
preg_replace("/(?<=>)[^><]+?(?=<)/", "$1",$string);
不太了解正则表达式,我假设$ 1会返回匹配,但事实并非如此。现在这个模式(上面)可以删除html标签之间的所有数据,如果我
preg_replace("/(?<=>)[^><]+?(?=<)/", "",$string);
我的主要目标是有一条线,我可以通过像
这样的函数放回返回的匹配preg_replace("/(?<=>)[^><]+?(?=<)/", string_function("$1"),$string);
答案 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
应包含您想要的结果。