Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 捕获前缀或后缀或两者_Regex - Fatal编程技术网

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)?$
抱歉的回复乱七八糟,请更新原始帖子。