首页 > 解决方案 > 如果以特定子字符串开头,则正则表达式忽略字符串

问题描述

我需要查找不以字符串“http”开头的正则表达式域名。例如:

我找到了一个几乎得到这个的正则表达式:

(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-]{,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}

但它也检测到“https://domain1.com”

给出的例子:

https://regex101.com/r/DjDBrx/1/

在这个例子中,我想避免“https://domain1.com”

任何帮助将不胜感激。

标签: regex

解决方案


您可以使用单词边界和两个否定的lookbehinds:

\b(?<!http:\/\/)(?<!https:\/\/)(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}\b
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                ^^

(?<!http:\/\/)(?<!https:\/\/)两个负面的lookbehinds将在字符串内的同一位置触发(因为lookarounds是非消耗模式)并且 - 在确保该位置位于单词边界之后\b- 如果存在http://https://立即匹配,它们将失败当前位置的左侧。


推荐阅读