Regex Perl正则表达式-Is(x | y)*等价于[xy]*?

Regex Perl正则表达式-Is(x | y)*等价于[xy]*?,regex,perl,Regex,Perl,正如标题所说,正则表达式模式(x | y)*是否与[xy]*匹配相同的字符串?它几乎是等效的,但第一个表单从由()分隔的组中捕获,当正则表达式匹配时,可以使用$1检索(对于第一个) 如果要避免捕获,请使用 (?:re) 其中,re是正则表达式 注 这仅在x和y恰好是x和y时有效,而不是在它们是常规正则表达式时有效 请参见是的,它们匹配完全相同的字符串集 它们并不等同(x | y)*设置a,[xy]*不设置 因此,(?:x | y)*和[xy]*在行为上是等价的,因为它们都不设置反向引用。我们称

正如标题所说,正则表达式模式
(x | y)*
是否与
[xy]*
匹配相同的字符串?

它几乎是等效的,但第一个表单从由
()
分隔的组中捕获,当
正则表达式匹配时,可以使用
$1
检索(对于第一个)

如果要避免捕获,请使用

(?:re)
其中,
re
是正则表达式

注 这仅在
x
y
恰好是
x
y
时有效,而不是在它们是常规正则表达式时有效


请参见

是的,它们匹配完全相同的字符串集

它们并不等同<代码>(x | y)*
设置a,
[xy]*
不设置


因此,
(?:x | y)*
[xy]*
在行为上是等价的,因为它们都不设置反向引用。

我们称字符串集为“语言”。实际上,当x和y解析为单个代码点时,它们只匹配相同的字符串集,当它们在正则表达式和方括号字符类内部都相同时。因此,如果x是abc,y是def,它将不起作用。如果它们中的任何一个类似于
\b
\R
或许多其他更复杂的东西,它也不会起作用。@tchrist我把
x
y
按字面意思理解为“x”和“y”,因为他没有说
$x
$y
。但我可能错了。注意澄清OP?仅适用于极为有限的x和y可能值。请参阅下面我的评论。即使如此,这也仅在x和y正好是
x
y
时有效,而不是在它们是常规正则表达式时有效。