除了以自定义字符串开头的URL之外的正则表达式匹配

时间:2013-10-03 23:54:15

标签: regex url match except

我有正文和正则表达式

文字就像是

foo https://www.google.hu <img ... src="http://a-page.com/foobar.jpg" ...> bar

正则表达式

/(http|https|ftp)\:\/\/(www\.)?([a-zA-Z0-9\-\_\.]+)\.([a-z]{1,5}+)\/([a-zA-Z0-9\.\?\=\&\-\_\~\/\%\+\;]+)?(\#([a-zA-Z0-9\_]+))?/i

我会用特殊情况更新它

如果url以src开头=“如果正则表达式匹配不会包含图像网址只有其他网址

我试过这个

/(?!src\=\")(http|https|ftp)\:\/\/(www\.)?([a-zA-Z0-9\-\_\.]+)\.([a-z]{1,5}+)\/([a-zA-Z0-9\.\?\=\&\-\_\~\/\%\+\;]+)?(\#([a-zA-Z0-9\_]+))?/

但它不起作用

请问你能帮帮我吗?

我知道我可以添加(^ | \ s)到模式,但是当我想要隐藏url时它将无法工作因为用户可以在url之前写任何char并且url不再被隐藏和其他一些正则表达式代码也在源代码中,其中一个是img bb标记代码,我不想隐藏(替换)它的url

(对不起我的英文)

1 个答案:

答案 0 :(得分:1)

说实话,我很难理解你想要什么,但我想你的意思是你有一个包含各种URL的文本,你不想匹配html img中包含的那些标签。如果是这样,试试这个:

/(?<!src\=\")(https?|ftp):\/\/(www\.)?([\w\-\.]+)\.([a-z]{1,5}+)\/?([\w\.\?\=\&\-\~\/\%\+\;]+)?(\#(\w+))?/

注意:

  • 您可以将[A-Za-z0-9_]替换为字符类\w(请参阅perlre中的更多内容。)
  • 您尝试的(?!pattern)断言是否定预见断言。在您的情况下,您需要一个负面的 look-behind (?<!pattern)(再次,您可以阅读perlre了解更多信息)。