您好我正在尝试使用正则表达式从html中删除链接,如下所示:
<p>some random text < hr ef="http://url.co.uk/link/">link text</a> some more random text.</p>
我使用的reg表达式是:
preg_match_all('/(< href="http:\/\/url.co.uk\/([\d\D]*?)\/">([\d\D]*?)<\/a>)/', $content, $matches);
在链接的一部分由于换行而在其中间返回时,其工作正常,如下所示:
<p>some random text < href="
http://url.co.uk/link/">link text</a> some more random text.</p>
carrage返回可以是链接中的任何位置,意味着链接不匹配。
任何人都可以建议一种解决这个方法的方法,或者通过做一些事情来删除因为reg表达式对文本的影响而删除的回报。
答案 0 :(得分:4)
html解析器可以为你完成工作而没有错误,simplehtmldom使用非常简单(需要php 5+):http://simplehtmldom.sourceforge.net/
答案 1 :(得分:2)
您可以使用\s*
来消除无关的空白和换行符。另外,你应该用一个否定的字符类替换每个[\d\D]*
来使它更严格:
preg_match_all('#<a[^>]+href="\s*(http://url.co.uk/[^"]+)">([^<]+)</a>#'
您可能希望在等号前后应用更多\s*
。 [^>]
是忽略额外html属性的常用习惯用法,[^"]
同样最适合匹配html属性,而[^<]
则匹配不包含html标记的文本内容。
此外,此版本仅返回URL(不是完整标记)作为$ matches [1],包含的文本作为$匹配[2]。
答案 2 :(得分:0)
使用s
选项获取。匹配所有字符。请参阅this。