是否可以定义一个模式并重用它来捕获多个组?
Is it possible to define a pattern and reuse it to capture multiple groups?
是否可以一次定义模式的一部分然后命名它,以便它可以在主模式中多次重复使用而不必再次写出来?
画个图,我的模式看起来和这个很像(伪正则表达式模式)
(PAT),(PAT), ... ,(PAT)
其中 PAT
是一些冗长的模式。
要求
- 不必重复该模式,因为它的长度成为一个问题(目前,Notepad++ 在使用正则表达式时只允许在搜索框中输入 2047 个字符,我很容易超过这个限制)
- 每个捕获组都应该能够独立于其兄弟姐妹进行匹配。例如,假设我的模式是
([a-z]),([a-z]),([a-z])
那么 a,a,a
和 a,b,c
应该匹配
我研究过命名第一个捕获组,然后在后续捕获组中引用它,但这种方法违反了第二个要求(即,它无法匹配 a,b,c
)。是否有仅使用正则表达式来满足这两个要求的直接或间接方式?
我的最终目标是能够获取和访问每个捕获组的值,这样我就可以稍后在搜索和替换框的 "replace" 部分中操作每个组。
要重复使用模式,您可以使用 (?n)
,其中 n
是要重复的组的编号。例如,您的实际模式:
(PAT),(PAT), ... ,(PAT)
可以替换为:
(PAT),(?1), ... ,(?1)
(?1)
与 (PAT)
相同的模式 PAT
是什么。
您可能有多个模式:
(PAT1),(PAT2),(PAT1),(PAT2),(PAT1),(PAT2),(PAT1),(PAT2)
可缩减为:
(PAT1),(PAT2),(?1),(?2),(?1),(?2),(?1),(?2)
或:
((PAT1),(PAT2)),(?1),(?1),(?1)
或:
((PAT1),(PAT2)),(?1){3}
是否可以一次定义模式的一部分然后命名它,以便它可以在主模式中多次重复使用而不必再次写出来?
画个图,我的模式看起来和这个很像(伪正则表达式模式)
(PAT),(PAT), ... ,(PAT)
其中 PAT
是一些冗长的模式。
要求
- 不必重复该模式,因为它的长度成为一个问题(目前,Notepad++ 在使用正则表达式时只允许在搜索框中输入 2047 个字符,我很容易超过这个限制)
- 每个捕获组都应该能够独立于其兄弟姐妹进行匹配。例如,假设我的模式是
([a-z]),([a-z]),([a-z])
那么a,a,a
和a,b,c
应该匹配
我研究过命名第一个捕获组,然后在后续捕获组中引用它,但这种方法违反了第二个要求(即,它无法匹配 a,b,c
)。是否有仅使用正则表达式来满足这两个要求的直接或间接方式?
我的最终目标是能够获取和访问每个捕获组的值,这样我就可以稍后在搜索和替换框的 "replace" 部分中操作每个组。
要重复使用模式,您可以使用 (?n)
,其中 n
是要重复的组的编号。例如,您的实际模式:
(PAT),(PAT), ... ,(PAT)
可以替换为:
(PAT),(?1), ... ,(?1)
(?1)
与 (PAT)
相同的模式 PAT
是什么。
您可能有多个模式:
(PAT1),(PAT2),(PAT1),(PAT2),(PAT1),(PAT2),(PAT1),(PAT2)
可缩减为:
(PAT1),(PAT2),(?1),(?2),(?1),(?2),(?1),(?2)
或:
((PAT1),(PAT2)),(?1),(?1),(?1)
或:
((PAT1),(PAT2)),(?1){3}