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

use*_*152 22 regex perl

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

Omn*_*ity 34

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

他们并不等同. (x|y)*设置反向引用,[xy]*没有.

因此(?:x|y)*并且[xy]*在行为上是等同的,因为它们都没有设置反向引用.

  • 实际上,当*x*和*y*都解析为单个代码点时,它们只匹配相同的字符串集,并且当它们在正则表达式和方括号字符类内部都相同时.因此,如果*x*是`abc`而*y*是`def`,它将无效.如果它们中的任何一个像`.`或`\ b`或`\ R``,或许多其他更复杂的东西,它也将无法工作. (4认同)
  • @tchrist我把`x`和'y`简单地称为"x"和"y",因为他没有说'$ x`或'$ y`.但我可能是错的.关注澄清OP? (2认同)

Gil*_*not 13

它接近等效的,但第一种形式使得捕获从所述由分隔( )可与被检索$1(对于第一个)的时regex相匹配.

如果您想避免捕获,请使用

(?:re)
Run Code Online (Sandbox Code Playgroud)

re正则表达式在哪里.

注意

这只是工作,如果xy是完全xy,不,如果他们是普通的正则表达式

请参阅回溯

  • 即便如此,这只有在*x*和*y*恰好是"x"和"y"时才有效,而不是它们是一般的正则表达式. (2认同)