Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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,这段代码怎么会返回true 要匹配的字符串:ab 模式:/^a | b$/ 但当我用这样的括号插入时: 模式:/^(a | b)$/ 然后,它将返回false第一种方法以a开头或以b结尾 第二个表示1个字符,一个a或一个b没有括号的第一个模式相当于/(^a)|(b$)/ 原因是,管道操作符(“替换操作符”)在所有正则表达式操作符中具有最低的优先级:(第一个标题下的第三段)/^a | b$/匹配以a开头或以b结尾的字符串。因此它与afoo,barb,a,b匹配 /^(a | b)$/:匹配以a或b

这段代码怎么会返回true

要匹配的字符串:
ab

模式:
/^a | b$/

但当我用这样的括号插入时:

模式:
/^(a | b)$/


然后,它将返回
false

第一种方法以
a
开头或以
b
结尾


第二个表示1个字符,一个
a
或一个
b
没有括号的第一个模式相当于
/(^a)|(b$)/


原因是,管道操作符(“替换操作符”)在所有正则表达式操作符中具有最低的优先级:(第一个标题下的第三段)

/^a | b$/
匹配以
a
开头或以
b
结尾的字符串。因此它与
afoo
barb
a
b
匹配

/^(a | b)$/
:匹配以
a
b
开头和结尾的字符串。因此,它要么匹配
a
要么匹配
b
而不匹配其他内容

这是因为在正则表达式操作符中,更改
|
的优先级非常低


|
的优先级低于锚定,因此您说的是
^a
b$
(这是真的),而第二个是指“一个字符串,或者
a
或者
b
”(这是假的).

^a | b$
中,您将在开头匹配
a
,或在结尾匹配
b


<> > <代码> >(a,b)$ < /C> >您匹配<代码> < <代码> >或<代码> b>代码>(在开始和结束时)。

PHP、C++、Python,您要问的是ReGEX实现?(在我看来像是PHP PCRE。)我相信他们对我提供的代码有相同的实现,所以我把它们放在标签上:/它的优先级较低,而不是较高!呃,当然,我的意思是它以前被评估过:)我总是发现这个较低/较高的东西是武断和违反直觉的……但它以前没有评估过——它是在之后评估的。最低优先级最后计算,最高优先级第一。这应该是直观的。我认为是“之前/之后”的术语造成了混乱,因为最外层/最大层实际上表明优先级较低。