我使用的 API 有时会截断它返回的文本内的链接,而不是“longtexthere https://fancy.link”,我得到的是“longtexthere https://fa …”。
仅当链接完整时,或者换句话说不包含“...”字符时,我才尝试匹配该链接。
到目前为止,我可以使用以下正则表达式获取链接:
((?:https?:)?\/\/\S+\/?)
但显然它会返回每个链接,包括损坏的链接。
我尝试过做这样的事情:
((?:https?:)?\/\/(?:(?!…)\S)+\/?)
虽然开始忽略“…”字符,但它仍然返回链接,但只是不包含该字符,因此对于“https://fa …”,它返回“https://fa”,而我只是希望它忽略那个损坏的链接并继续。
我已经为此奋斗了几个小时,但无法理解它。 :(
感谢您提前提供的任何帮助。
最佳答案
你可以使用
(?:https?:)?\/\/[^\s…]++(?!…)\/?
参见the regex demo 。所有格量词 [^\s...]++
将匹配所有非空白和非 ...
字符,无需稍后回溯,然后检查下一个字符是否不是 …
。如果是,则找不到匹配项。
作为替代方案,如果您的正则表达式引擎允许所有格量词,请使用 negative lookahead版本:
(?!\S+…)(?:https?:)?\/\/\S+\/?
参见another regex demo 。如果 ...
后面有 1 个以上非空白字符,则先行 (?!\S+...)
将导致匹配失败。
关于仅当单词(url)不包含字符时才匹配单词(url)的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36358135/