kir*_*tee 5 regex url regex-negation regex-lookarounds
我使用的API有时会截断它返回的文本中的链接,而不是"longtexthere https://fancy.link "我得到"longtexthere https:// fa ...".
我只是在完成链接时,或者换句话说不包含"..."字符.
到目前为止,我可以使用以下正则表达式获取链接:
((?:https?:)?\/\/\S+\/?)
Run Code Online (Sandbox Code Playgroud)
但显然它会返回每个链接,包括破碎的链接.
我试过这样的事情:
((?:https?:)?\/\/(?:(?!…)\S)+\/?)
Run Code Online (Sandbox Code Playgroud)
虽然开始忽略"..."字符,但它仍然返回链接,但只是没有包含字符,因此在" https:// fa ..." 的情况下,它返回" https:// fa ",而我只是想要它忽略那个断开的链接并继续前进.
几个小时一直在争吵,只是无法理解它.:(
在此先感谢您的帮助.
您可以使用
\n\n(?:https?:)?\\/\\/[^\\s\xe2\x80\xa6]++(?!\xe2\x80\xa6)\\/?\nRun Code Online (Sandbox Code Playgroud)\n\n请参阅正则表达式演示。所有格量词[^\\s\xe2\x80\xa6]++将匹配所有非空白和非\xe2\x80\xa6字符,而无需稍后回溯,然后检查下一个字符是否不是\xe2\x80\xa6。如果是,则找不到匹配项。
作为替代方案,如果您的正则表达式引擎允许所有格量词,请使用负向前看版本:
\n\n(?!\\S+\xe2\x80\xa6)(?:https?:)?\\/\\/\\S+\\/?\nRun Code Online (Sandbox Code Playgroud)\n\n请参阅另一个正则表达式演示。(?!\\S+\xe2\x80\xa6)如果 1 个以上非空白字符后跟 ,则先行查找将导致匹配失败\xe2\x80\xa6。