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



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

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

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

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

预期成果:2009-2010年比赛

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

预期结果:无匹配项

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

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

您可以使用两个负面的回溯,一个用于检查每种情况:

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

正则表达式101演示

对于以节号开头的一组字符,可以使用以下示例进行负回溯,并且可以选择使用空格(第二个问号指示它前面的字符可以存在,也可以不存在(。

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

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

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

使用与一个版权字符或后跟空格的版权字符匹配的负后视。

图案:(?<![§@.©-]|[§@.©-]s)bd{4}-d{4}b

正则表达式101演示

解释

  • (?<!打开负面的回头看
    • [§@.©-]匹配[§@.©-]符号组
    • |
    • [§@.©-]s匹配后跟s空格的[§@.©-]符号组
  • )关闭负面的回望
  • b匹配单词边界
  • d{4}-d{4}匹配 4 位数字,后跟破折号和另外 4 位数字
  • b结束词边界

相关内容