如果群组前的一个和/或两个字符包含特定文字,则不匹配

时间:2019-09-12 00:24:55

标签: regex

仅当组前面没有一个或两个特定字符时,我才想匹配该组。

当前面只有一个字符时,我可以使它工作。 但是,如果我需要检查前面两个字符,我就会卡住。

示例: 我希望匹配“ 2009-2010”,只要“ 2009-2010”前没有“©”或“©”(即版权符号+空格)

示例文本:这是您提供的2009-2010年电话号码

预期结果:2009-2010年比赛

示例文字:保留所有权利©2009-2010

预期结果:不匹配

我的正则表达式适用于前面的一个字符,例如:§@。©-

代码:(?<![§@.©-])\b(\d{4})-(\d{4})\b

3 个答案:

答案 0 :(得分:0)

您可以使用两个否定的隐藏项,一个来检查每种情况:

(?<![§@.©-])(?<![§@.©-] )\b(\d{4})-(\d{4})\b

Demo on regex101

答案 1 :(得分:0)

您可以使用下面带有负向后看的示例来查找以节符号开头的一组字符,并且可以有一个空格(第二个问号表示在其前面的字符可以出现或不能出现)。

(?<!(©\s?))\b(\d{4}-\d{4})\b

如果您要以任意顺序或长度匹配字符集的不同组合,请在右方括号后使用星号表示该字符可以出现任意次。

(?<![§@.©-]*)\b(\d{4})-(\d{4})\b

答案 2 :(得分:0)

在后面使用负号,匹配一个版权字符或一个版权字符,后跟一个空格。

模式:(?<![§@.©-]|[§@.©-]\s)\b\d{4}-\d{4}\b

demo on regex101

说明

  • (?<!在后​​面隐藏一个负数
    • [§@.©-][§@.©-]符号组匹配
    • |
    • [§@.©-]\s匹配[§@.©-]符号组,后跟\s空格
  • )关闭后面的负面表情
  • \b匹配单词边界
  • d{4}-\d{4}匹配4位数字,后接破折号和另外4位数字
  • \b结束词边界