在正则表达式中将一组模式中的模式列入受控多次出现的白名单

2024-03-01

我希望以下示例返回匹配项

  • I like foob​​ar.com
  • 我喜欢 google.com 和foob​​ar.com
  • I like foob​​ar.com和 google.com
  • 我喜欢 foobargoogle.com 和 googlefoob​​ar.com
  • 我喜欢 yahoo.com 和foob​​ar.com
  • I like foob​​ar.com和雅虎网站
  • 我喜欢 foobaryahoo.com 和 yahoofoob​​ar.com

我不希望以下示例返回匹配项

  • I like 雅虎网站
  • 我喜欢富巴雅虎网站
  • I like 谷歌网站
  • 我喜欢富巴谷歌网站
  • I like 谷歌网站 and 雅虎网站
  • 我喜欢富巴谷歌网站和 foobar雅虎网站

注意 - 这不是平等匹配,而是包含匹配

我尝试了以下正则表达式模式:

(?!(^.*((google)|(yahoo))\.com.*$))(^.*\w+\.com.*$)

但一旦出现“google.com”或“yahoo.com”,即使“foobar.com”出现在它之前,它也会因没有匹配而终止。

例如。我喜欢 foobar.com,但不喜欢 google.com

基本上,我希望它忽略字符串中任何位置的“google.com”和“yahoo.com”并检测任何其他类型:“\w+.com”。

Note:

  • 谷歌网站 and 雅虎网站只是例子。因此,它应该忽略任何字符串长度的字母数字字符的匹配集
  • 忽略大小写和空格

您可以通过 PCRE 动词来做到这一点(*跳过)(*F) https://stackoverflow.com/questions/24534782/how-do-skip-or-f-work-on-regex .

(?:google|yahoo)(?:\.com)?(*SKIP)(*F)|(?:(?!google|yahoo)\w)+\.com
^                                    ^                           ^
|------Part you don't want-----------|------------Part you want--|

DEMO https://regex101.com/r/nN2yU4/1

解释:

  • (?:google|yahoo)(?:\.com)?突然匹配google or yahoo带有以下可选选项的字符串.com。查看演示here https://regex101.com/r/nN2yU4/2.

  • (?:google|yahoo)(?:\.com)?(*SKIP)(*F)|以及以下 PCRE 动词(*SKIP)(*F)会导致之前的匹配失败。以及以下内容|OR 将匹配所有不跟随的边界google or yahoo字符串。查看演示here https://regex101.com/r/nN2yU4/3

  • (?:(?!google|yahoo)\w)+\.com现在,正则表达式引擎会将匹配的边界视为起点,它突然匹配一个或多个单词字符,但不匹配google or yahoo.

  • \.com有助于仅匹配以结尾的字符串.com
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在正则表达式中将一组模式中的模式列入受控多次出现的白名单 的相关文章

随机推荐