仅当组前面没有一个或两个特定字符时,我才想匹配该组。
当只有一个前置字符时,我可以让它工作。 但是,如果我需要检查前面的两个字符,我就卡住了。
例: 我希望匹配"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
结束词边界