Regex Don';如果组前的一个和/或两个字符包含特定文本,则不匹配

Regex Don';如果组前的一个和/或两个字符包含特定文本,则不匹配,regex,Regex,仅当组前面没有一个或两个特定字符时,我才希望匹配该组 当前面只有一个字符时,我可以让它工作。 但是如果我需要检查前面的两个字符,我就卡住了 例如: 我希望与“2009-2010”匹配,只要“2009-2010”前面不加“)”或“)(这是版权标志+空格) 示例文本:这是您提供2009-2010年的电话号码 预期结果:2009-2010年比赛 示例文本:版权所有©2009-2010 预期结果:不匹配 我的正则表达式适用于前面的一个字符,例如:§@)- 代码:(?您可以使用两个反向lookbehind

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

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

例如: 我希望与“2009-2010”匹配,只要“2009-2010”前面不加“)”或“)(这是版权标志+空格)

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

预期结果:2009-2010年比赛

示例文本:版权所有©2009-2010

预期结果:不匹配

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


代码:
(?

您可以使用两个反向lookbehind,一个用于检查每种情况:

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

您可以使用以下带有负回溯的示例来表示一组以节号开头的字符,并且可以选择使用空格(第二个问号表示前面的字符可以存在,也可以不存在)

(?
如果您的要求是以任何顺序或长度匹配字符集的不同组合,请在结束方括号后使用星号表示它可以出现任意次数

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

(?使用与一个版权字符或版权字符后跟空格匹配的负查找

模式:

解释

  • (?打开一个反向查找
    
    • [§@.©-]
      匹配
      [§@.©-]
      符号组
    • |
    • [§@.©-]\s
      匹配一组
      [§@.©-]
      符号,后跟一个
      \s
      空格
  • 关闭反向查找
  • \b
    匹配单词边界
  • d{4}-\d{4}
    匹配4位数字,后跟破折号和另外4位数字
  • \b
    结束单词边界

问题(?@user11662292不,它不会,它只会在
2009-2010
前面有一个特殊字符和空格时阻止匹配。请参阅演示…谢谢!!这正是我需要它做的-你知道我使用visual studio find选项来验证这些,它没有施加这样的限制。不确定其他正则表达式引擎。只有少数正则表达式引擎es支持可变长度查找。
(?<![§@.©-]*)\b(\d{4})-(\d{4})\b