是否可以定义模式并重用它来捕获多个组?

时间:2017-01-26 17:03:11

标签: regex notepad++ pcre

是否可以定义一部分模式然后将其命名为可以在主模式中多次重复使用而不必再将其写出来?

要绘制图片,我的图案看起来与此类似(伪正则表达式图案)

(PAT),(PAT), ... ,(PAT)

其中PAT是一种冗长的模式。

要求

  1. 不必重复该模式,因为它的长度成为一个问题(目前,Notepad ++在搜索框中只允许2047个字符使用正则表达式而且我很容易超过此限制)
  2. 每个捕获组应该能够独立于其兄弟姐妹进行匹配。例如,假设我的模式为([a-z]),([a-z]),([a-z]),那么a,a,aa,b,c应匹配
  3. 我已经研究过命名第一个捕获组然后在后续捕获组中引用它,但是这个方法打破了第二个要求(即,它无法匹配a,b,c)。是否有直接或间接的方法来仅使用正则表达式来满足这两个要求?

    我的最终目标是能够获取和访问每个捕获组的值,以便稍后在"替换"中操作每个组。搜索的一部分&替换盒子。

1 个答案:

答案 0 :(得分:9)

要重复使用模式,您可以使用(?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}