正则表达式后视对于竖线 (|) 无效,但正则表达式前视在 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 (か
) 中删除第一个字符,即
(?<=り|[しつ])子
或更优
(?<=[りしつ])子
它会起作用,尽管它会匹配前面有 り
的 子
和任何字符。如果这不可接受,您可以使用捕获组,即
(かり|[しつ])子
并在您的替换中包含
我想在 Notepad++ 中匹配这些示例中的子
(1) し子
(2) かり子
(3) 子し
(4) 子かり
像 子(?=かり|[しつ])
这样的前瞻在第 (3) 和 (4) 行与它完美匹配,没有问题。但是出于某种原因,诸如 (?<=かり|[しつ])子
之类的后视是无效的,并且根本无法在第 (1) 和 (2) 行匹配它,即使单独 (?<=かり)子
和 (?<=[しつ])子
工作得很好.这是为什么?
你的问题是你的否定回顾具有可变长度(2 个字符 かり
或一个字符 [しつ]
,并且大多数正则表达式引擎不支持可变长度回顾,包括 Notepad++ 中的引擎. 如果你可以从 lookbehind (か
) 中删除第一个字符,即
(?<=り|[しつ])子
或更优
(?<=[りしつ])子
它会起作用,尽管它会匹配前面有 り
的 子
和任何字符。如果这不可接受,您可以使用捕获组,即
(かり|[しつ])子
并在您的替换中包含