正则表达式[ - +]之间有什么区别?和( - | +)?

时间:2013-10-01 14:33:23

标签: regex

正则表达式之间有什么区别

[-+]? 

(-|+)?

他们的意思不一样吗?

3 个答案:

答案 0 :(得分:8)

两者匹配相同的字符。但第二种形式产生捕获组。您可以使用反向引用来访问组(\1$1,...根据您的正则表达式引擎。)

<强>更新

第二种形式在许多正则表达式引擎中无效。 (对于匹配+匹配的一些旧的正则表达式引擎有效)。

因为+具有特殊含义:前一个模式重复一次或多次,但没有什么可重复的。

答案 1 :(得分:2)

它们是相同的,但我更喜欢字符类(第一种形式),因为第二种形式捕获了您可能不需要的-+

即使这相当于没有捕获组中的文本也是等效的:

(?:-|+)?

答案 2 :(得分:-2)

大多数正则表达式可以以交替组的形式放置,并且星型运算符 - 例如,[ab]+可以写为(a|b)(a|b)* - 但这更加冗长,因此存在其他运算符。您在正则表达式中包含了问号运算符,但实际上[-+]?等同于(+|-|)

所以确实没有区别(除了其他人提到的捕获之外),但这并不意味着其他运算符对于使正则表达式紧凑且直观易懂无用。