我正在使用的API有时会截断它返回的文本中的链接,而不是“longtexthere https://fancy.link”我得到“longtexthere https://fa ...”。
我试图仅在链接完成时匹配链接,或者换句话说不包含“...”字符。
到目前为止,我可以使用以下正则表达式获取链接:
((?:https?:)?\/\/\S+\/?)
但很明显它会返回包括破碎链接在内的所有链接。
我试过这样的事情:
((?:https?:)?\/\/(?:(?!…)\S)+\/?)
虽然开始忽略“...”字符但它仍然返回链接但是没有包含字符,因此在“https://fa ...”的情况下它返回“https://fa”而我只是希望它忽略那个断开的链接并继续前进。
已经打了好几个小时,只是无法理解它。 :(
提前感谢您的帮助。
答案 0 :(得分:2)
您可以使用
(?:https?:)?\/\/[^\s…]++(?!…)\/?
见the regex demo。占有量词[^\s…]++
将匹配所有非空格和非…
字符,而不会在以后回溯,然后检查下一个字符是否不是…
。如果是,则不会找到匹配。
作为替代方案,如果您的正则表达式引擎允许占有量词,请使用negative lookahead版本:
(?!\S+…)(?:https?:)?\/\/\S+\/?
见another regex demo。如果使用(?!\S+…)
跟随1个以上的非空白字符,则前瞻…
将无法匹配。
答案 1 :(得分:1)
尝试:
((?:https?:)?\/\/\S+[^ \.]{3}\/?)
它与原始模式相同..你只需告诉它最后三个字符不应该是'。' (期间)或' ' (空间)
更新:您的第二个链接有效。
如果你稍微调整你的正则表达式,它会做你想要的:
((?:https?:)?\/\/\S+[^ …] \/?)
是的,它看起来就像你在那里所拥有的,除了我添加了一个' ' (空格)在我们不想要的部分之后......这将迫使正则表达式匹配,直到并包括它不能与具有' ...'的网址的空间。字符。没有最后的空间,它将匹配,直到不包括' ...'这就是为什么它没有做我们想要的;)
答案 2 :(得分:1)
答案 3 :(得分:0)