Regex 捕获前缀或后缀或两者
我有带有捕获组的正则表达式Regex 捕获前缀或后缀或两者,regex,Regex,我有带有捕获组的正则表达式(^A)(B)(C$) 我想匹配: (^A)(B)(C$) or (^A)(B) or ^(B)(C$) 基本上不是(B)本身。我正在查看前瞻、回顾、原子组,但不知道如何应用 编辑: 我想抓住 w10x10y10z10 w10x10z10 w10x10 x10y10z10 x10z10 只是没有 x10 x10y10 本身您可以添加一个条件,以避免在开始处锚定的负前瞻的帮助下仅匹配B或BC模式: ^(?!x\d+(?:y\d+)?$)(\d+\.?\d*)?((x
(^A)(B)(C$)
我想匹配:
(^A)(B)(C$) or
(^A)(B) or
^(B)(C$)
基本上不是(B)本身。我正在查看前瞻、回顾、原子组,但不知道如何应用
编辑:
我想抓住
w10x10y10z10
w10x10z10
w10x10
x10y10z10
x10z10
只是没有
x10
x10y10
本身您可以添加一个条件,以避免在开始处锚定的负前瞻的帮助下仅匹配
B
或BC
模式:
^(?!x\d+(?:y\d+)?$)(\d+\.?\d*)?((x\d+)(y\d+)?)(z\d+)?$
^^^^^^^^^^^^^^^^^^
请参阅(注意:此正则表达式版本使用不区分大小写的修饰符)
(?!x\d+(?:y\d+)
lookahead在匹配x
后基本上会失败,1+位,然后是可选的Y
序列和1+位,后跟字符串结尾。您可以添加一个条件,以避免仅匹配B
或BC
模式,并在开始处锚定一个负前瞻:
^(?!x\d+(?:y\d+)?$)(\d+\.?\d*)?((x\d+)(y\d+)?)(z\d+)?$
^^^^^^^^^^^^^^^^^^
请参阅(注意:此正则表达式版本使用不区分大小写的修饰符)
(?!x\d+(?:y\d+?$)
lookahead一旦匹配了x
,1+个数字,然后是可选的y
和1+个数字序列,后跟字符串的结尾,则基本上会使匹配失败。假设A
是字符串头,<代码> c>代码>是字符串尾部,<代码> b>代码>在字符串的中间。p>
/^AB|BC$/
如果B
太复杂,我们可以重新思考B
的含义如下:
/^AB1|B2C$/
其中
A
和C
具有相同的含义B1
表示中间子串的开始,B2
表示中间子串的结束 > p>假设代码> a <代码>为字符串头,<代码> c>代码>为字符串尾部,<代码> b>代码>在字符串的中间。p>
/^AB|BC$/
如果B
太复杂,我们可以重新思考B
的含义如下:
/^AB1|B2C$/
其中
A
和C
具有相同的含义B1
表示中间子串的开始,B2
表示中间子串的结束 我假设您尝试匹配的字符串有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
正则表达式可以完成以下任务:
(?我假设您尝试匹配的字符串有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
正则表达式可以完成以下任务:(?你的意思是要匹配一个可以是B
、AB
、BC
或ABC
的整个字符串吗?试试^(a)-(B)(C)?$
抱歉的回复乱七八糟,请更新原始帖子。您的意思是要匹配整个字符串,可以是B
、AB
、BC
或ABC
?请尝试^(a)-(B)(C)?$
抱歉的回复乱七八糟,请更新原始帖子。