仅当不包含字符时才匹配单词 (url) 的正则表达式
regex to match word (url) only if it does not contain character
我使用的 API 有时会截断 returns 文本中的 link,而不是 "longtexthere https://fancy.link" I get "longtexthere https://fa…"。
我试图匹配完整的 link,或者换句话说,不包含“…”字符。
到目前为止,我可以使用以下正则表达式获得 links:
((?:https?:)?\/\/\S+\/?)
但显然它 returns 每 link 包括损坏的。
我试过这样做:
((?:https?:)?\/\/(?:(?!…)\S)+\/?)
虽然开始忽略“...”字符,但它仍然返回 link 但只是不包括字符,所以在“https://fa…" it returned "https://fa”的情况下,我只是想让它忽略那个坏掉的 link 并继续前进。
我为此纠结了几个小时,就是无法理解它。 :(
提前感谢您的帮助。
请尝试:
https?:\/\/[^ ]*?…|(https?:\/\/[^ ]+\.[^ ]+)
这里是 demo.
尝试:
((?:https?:)?\/\/\S+[^ \.]{3}\/?)
它和你原来的模式一样..你只是告诉它最后三个字符不应该是'.' (句号)或 ' ' (space)
更新:您的第二个 link 成功了。
如果你稍微调整你的正则表达式,它就会做你想做的事:
((?:https?:)?\/\/\S+[^ …] \/?)
是的,除了我在不需要的部分之后添加了一个 ' ' (space) 之外,它看起来就像你在那里的一样。这将强制正则表达式匹配直到并包括space 它不能与具有 '...' 字符的 url 一起使用。如果没有 space 最后它会匹配直到不包括 '...' 这就是为什么它没有做我们想要的 ;)
您可以尝试使用正则表达式
https?:\/\/\w+(?:\.\w+\/?)+(?!\.{3})(\s|$)
您可以使用
(?:https?:)?\/\/[^\s…]++(?!…)\/?
参见the regex demo。所有格量词 [^\s…]++
将匹配所有非空白字符和非 …
字符而无需稍后回溯,然后检查下一个字符是否不是 …
。如果是,将找不到匹配项。
作为替代方案,如果您的正则表达式引擎允许所有格量词,请使用 negative lookahead 版本:
(?!\S+…)(?:https?:)?\/\/\S+\/?
参见 another regex demo。如果 1+ 个非空白字符后跟 …
.
,则前瞻 (?!\S+…)
将无法匹配
我使用的 API 有时会截断 returns 文本中的 link,而不是 "longtexthere https://fancy.link" I get "longtexthere https://fa…"。
我试图匹配完整的 link,或者换句话说,不包含“…”字符。
到目前为止,我可以使用以下正则表达式获得 links:
((?:https?:)?\/\/\S+\/?)
但显然它 returns 每 link 包括损坏的。
我试过这样做:
((?:https?:)?\/\/(?:(?!…)\S)+\/?)
虽然开始忽略“...”字符,但它仍然返回 link 但只是不包括字符,所以在“https://fa…" it returned "https://fa”的情况下,我只是想让它忽略那个坏掉的 link 并继续前进。
我为此纠结了几个小时,就是无法理解它。 :(
提前感谢您的帮助。
请尝试:
https?:\/\/[^ ]*?…|(https?:\/\/[^ ]+\.[^ ]+)
这里是 demo.
尝试:
((?:https?:)?\/\/\S+[^ \.]{3}\/?)
它和你原来的模式一样..你只是告诉它最后三个字符不应该是'.' (句号)或 ' ' (space)
更新:您的第二个 link 成功了。
如果你稍微调整你的正则表达式,它就会做你想做的事:
((?:https?:)?\/\/\S+[^ …] \/?)
是的,除了我在不需要的部分之后添加了一个 ' ' (space) 之外,它看起来就像你在那里的一样。这将强制正则表达式匹配直到并包括space 它不能与具有 '...' 字符的 url 一起使用。如果没有 space 最后它会匹配直到不包括 '...' 这就是为什么它没有做我们想要的 ;)
您可以尝试使用正则表达式
https?:\/\/\w+(?:\.\w+\/?)+(?!\.{3})(\s|$)
您可以使用
(?:https?:)?\/\/[^\s…]++(?!…)\/?
参见the regex demo。所有格量词 [^\s…]++
将匹配所有非空白字符和非 …
字符而无需稍后回溯,然后检查下一个字符是否不是 …
。如果是,将找不到匹配项。
作为替代方案,如果您的正则表达式引擎允许所有格量词,请使用 negative lookahead 版本:
(?!\S+…)(?:https?:)?\/\/\S+\/?
参见 another regex demo。如果 1+ 个非空白字符后跟 …
.
(?!\S+…)
将无法匹配