正则表达式匹配,但以自定义字符串开头的 url 除外



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

文本类似于

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 的文本,你不想匹配包含在 html img 标签中的那些。如果是这样,请尝试以下操作:

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

笔记:

  • 您可以将[A-Za-z0-9_]替换为字符类w(在perlre中阅读更多内容)。
  • 您尝试(?!pattern)断言是负面的前断言。在您的情况下,您想要一个负面的后视(?<!pattern)(同样,您可以阅读perlre以获取更多信息)。

最新更新