正则表达式后视对于竖线 (|) 无效,但正则表达式前视在 Notepad++ 中工作得很好

Regex lookbehind is invalid with a vertical bar ( | ), but regex lookahead works just fine in Notepad++

我想在 Notepad++ 中匹配这些示例中的子

(1) し子 (2) かり子 (3) 子し (4) 子かり

子(?=かり|[しつ]) 这样的前瞻在第 (3) 和 (4) 行与它完美匹配,没有问题。但是出于某种原因,诸如 (?<=かり|[しつ])子 之类的后视是无效的,并且根本无法在第 (1) 和 (2) 行匹配它,即使单独 (?<=かり)子(?<=[しつ])子 工作得很好.这是为什么?

你的问题是你的否定回顾具有可变长度(2 个字符 かり 或一个字符 [しつ],并且大多数正则表达式引擎不支持可变长度回顾,包括 Notepad++ 中的引擎. 如果你可以从 lookbehind () 中删除第一个字符,即

(?<=り|[しつ])子

或更优

(?<=[りしつ])子

它会起作用,尽管它会匹配前面有 和任何字符。如果这不可接受,您可以使用捕获组,即

(かり|[しつ])子

并在您的替换中包含