我有这个正则表达式来匹配所有网址并且效果很好:
$regex ='@((https?://)([-'w]+'.[-'w'.]+)+'w(:'d+)?(/([-'w/_'.',]*('?'S+)?)?)*)@';
return preg_replace_callback( $regex, 'replacing' , $content );
我需要避免在里面匹配网址:src="***"
和<a href="">***</>
想保留文本但替换网址。
我试过:在我的正则表达式中添加否定:
$regex ='@((?!src="|?!>)(https?://)([-'w]+'.[-'w'.]+)+'w(:'d+)?(/([-'w/_'.',]*('?'S+)?)?)*)@';
当 url 以 src= 开头时的第一个否定"第二个否定是当 href 和 href 之间>
有什么想法可以让它工作吗?
一个好的起点是lib_autolink处理<a>
情况,并且可以很容易地适应<img>
的情况。在单个正则表达式中执行此操作并非易事,也许是不可能的,除非您可以保证 HTML 完全有效(文本中没有杂散的引号等)。