我有捕获组(^A)(B)(C$)
我想要匹配:
(^A)(B)(C$) or
(^A)(B) or
^(B)(C$)
基本上不是(B)本身。我正在寻找前瞻,后视,原子团体,无法弄清楚如何申请。
编辑:
Group A: ^([Ww]\d+\.?\d*)?
Group B: (([Xx]\d+)([Yy]\d+)?)
Group C: ([Zz]\d+)?$
我想抓拍
w10x10y10z10
w10x10z10
w10x10
x10y10z10
x10z10
不是
x10
x10y10
本身
答案 0 :(得分:1)
您可以添加一个条件,以避免在开始时锚定的负前瞻的帮助下仅匹配B
或BC
模式:
^(?!x\d+(?:y\d+)?$)(\d+\.?\d*)?((x\d+)(y\d+)?)(z\d+)?$
^^^^^^^^^^^^^^^^^^
请参阅regex demo(注意:使用此正则表达式版本的用例不敏感修饰符)。
(?!x\d+(?:y\d+)?$)
前瞻一旦匹配x
,1 +位数,然后是Y
和1+位数的可选序列,后跟字符串结尾,基本上会失败。
答案 1 :(得分:1)
我假设您尝试匹配的字符串有4组:
w: w\d+
x: x\d+
y: y\d+
z: z\d+
试图捕获的小组是:
wxyz
wxz
wx
wxy
xyz
xz
wz
w
z
但不是
x
y
xy
正则表达式可以完成这项工作:((?<=w\d+)|(?=z\d+))(x\d+)?(y\d+)?
答案 2 :(得分:0)
假设A
是字符串头,C
是字符串尾,B
是字符串中间的东西。
/^AB|BC$/
如果B
过于复杂,我们可以重新考虑B
的含义,如下所示:
/^AB1|B2C$/
其中A
和C
具有相同的含义。 B1
表示中间子字符串的开头,B2
表示其结尾。