2012-09-05 102 views
2

好吧,我可能不会去这个正确的方式,但在这里不用..PHP preg_replace函数符号

我有这样的字符串,它需要一个链接,并提取标签之间的文字...

$string = $item; 
$pattern = '/\<a([^>]*)\>([^<]*)\<\/a\>/i'; 
$replacement = '$2'; 
$message = preg_replace($pattern, $replacement, $string); 

这个字符串中有几个项目有&符号(在文本部分,而不是标签部分),但大多数不包含。我试图找出一种方法,将&符号合并到当前模式中,或者在$message上执行另一个preg_replace以删除标签被删除后的&符号。

谢谢!

+0

如果你正在考虑多个正则表达式,你要么是过于复杂的东西,要么你是[Cthulu]的奴隶(http://stackoverflow.com/questions/1732348/regex-match-open-tags- except-xhtml-self-contained-tags/1732454#1732454)...真的:省去很多麻烦和_PARSE_ html。正如你自己所说的:你不会以正确的方式去做,所以修补你的方式 –

回答

2

是否要在&符后删除所有内容?然后它是

'/\<a([^>]*)\>([^<&]*)[^<]*\<\/a\>/i'; 

否则,你需要第二个操作。

顺便说一句:您的正则表达式还将匹配其他标记,从<a开始,如<author><audio>标记。

+0

谢谢,这工作很好! <一个问题并不是什么大问题,因为我正在替换一个只包含链接的数组,但是感谢您的支持! –

6

总是有$message = str_replace('&', '', $message);

顺便说一句,如果你试图剥去HTML输入标签,也就是strip_tags

例如,如果你输入

$text = '<a href="google.com">Text</a>'; 

然后strip_tags($text)会产生Text

+1

感谢您的答案,哪些工作!我选择了其他答案,因为它有点干净。但下次我会记住'strip_tags($ text)'!谢谢! –