【发布时间】:2016-04-01 13:52:01
【问题描述】:
我使用的 API 有时会截断它返回的文本中的链接,而不是“longtexthere https://fancy.link”我得到“longtexthere https://fa...”。
我只在链接完整或不包含“...”字符的情况下尝试匹配链接。
到目前为止,我可以使用以下正则表达式获取链接:
((?:https?:)?\/\/\S+\/?)
但显然它会返回每个链接,包括损坏的链接。
我尝试过这样做:
((?:https?:)?\/\/(?:(?!…)\S)+\/?)
虽然它开始忽略“...”字符,但它仍然返回链接,但只是不包含该字符,所以对于“https://fa...”的情况,它返回“https://fa”,而我只是想要它忽略那个断开的链接并继续前进。
已经为此奋斗了好几个小时,但我无法理解它。 :(
提前感谢您的帮助。
【问题讨论】:
-
您的正则表达式引擎是否允许所有格量词?试试
(?:https?:)?\/\/[^\s…]++(?!…)\/? -
请注意,您也可以在末尾删除
\/?,因为它永远不会匹配。如果您的正则表达式风格是 JavaScript 或 Python,请尝试(?!\S+…)(?:https?:)?\/\/\S+ -
如果你的正则表达式支持所有格量词和lookbehind,你也可以尝试
(?:https?:)?\/\/\S++(?<!…)如果lookbehind不匹配,所有格量词将防止回溯。 -
哇@WiktorStribiżew 成功了!!!您应该将其发布为答案,因为这是唯一正确的答案。 regex101.com/r/wC7tO5/1
-
但是正则表达式的味道是什么?哪种模式适合你?
标签: regex url regex-negation regex-lookarounds