【问题标题】:Regex match except urls starting with a custome strings正则表达式匹配,除了以自定义字符串开头的 url
【发布时间】:2013-10-10 20:21:38
【问题描述】:

我有一个文本和一个正则表达式模式

文本类似于

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=" 开头,如果正则表达式匹配不包含图像 url 只有其他 url,那就太好了

我试过了

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

但它不起作用

你能帮帮我吗?

我知道我可以将 (^|\s) 添加到模式中,但是如果我想隐藏 url,因为用户可以在 url 之前写任何字符并且 url 不再隐藏以及其他一些正则表达式,它就不起作用代码也在源代码中,其中一个是 img bb 标签代码,我不想隐藏(替换)它的 url

(对不起我的英语)

【问题讨论】:

  • 你为什么要逃避所有这些字符?如果您只转义那些需要的,正则表达式会更清晰。

标签: regex url match except


【解决方案1】:

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

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

注意事项:

  • 您可以将[A-Za-z0-9_] 替换为字符类\w(在perlre 中阅读更多内容)。
  • 您尝试的(?!pattern) 断言是否定的look-ahead 断言。在你的情况下,你想要一个否定的look-behind(?&lt;!pattern)(同样你可以阅读perlre了解更多信息)。

【讨论】:

  • +1 没有尝试您的答案(我相信它有效),但 perlre 的链接和您对后视的观察对我有帮助。谢谢。
猜你喜欢
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2016-07-12
  • 2019-10-15
  • 2011-01-08
  • 2015-04-27
  • 1970-01-01
相关资源
最近更新 更多