仅当单词(url)不包含字符时才匹配单词(url)的正则表达式

标签 regex url regex-negation regex-lookarounds

我使用的 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/

相关文章:

regex - Perl 正则表达式问题!

PHP preg_replace_callback,仅替换 1 个反向引用?

.csv 格式的正则表达式和定位项

javascript - 在字符串正则表达式中查找模式

javascript - 如何在 jQuery 中匹配 URL 和 href?

url - 斜杠哈希斜杠

java - 如果字符串仅匹配 Java 中的一组,则使用正则表达式来匹配该字符串

java - 使用 Jsoup 连接到 url,但 Jsoup 调用了另一个 url。为什么?

JavaScript 正则表达式提取字符串的不同部分

regex - 如何在没有复杂的手动编辑的情况下将任何正则表达式转换为自身的补充?