正则表达式之间有什么区别
[-+]?
和
(-|+)?
他们的意思不一样吗?
答案 0 :(得分:8)
两者匹配相同的字符。但第二种形式产生捕获组。您可以使用反向引用来访问组(\1
或$1
,...根据您的正则表达式引擎。)
<强>更新强>
第二种形式在许多正则表达式引擎中无效。 (对于匹配+
匹配的一些旧的正则表达式引擎有效)。
因为+
具有特殊含义:前一个模式重复一次或多次,但没有什么可重复的。
答案 1 :(得分:2)
它们是相同的,但我更喜欢字符类(第一种形式),因为第二种形式捕获了您可能不需要的-
或+
。
即使这相当于没有捕获组中的文本也是等效的:
(?:-|+)?
答案 2 :(得分:-2)
大多数正则表达式可以以交替组的形式放置,并且星型运算符 - 例如,[ab]+
可以写为(a|b)(a|b)*
- 但这更加冗长,因此存在其他运算符。您在正则表达式中包含了问号运算符,但实际上[-+]?
等同于(+|-|)
所以确实没有区别(除了其他人提到的捕获之外),但这并不意味着其他运算符对于使正则表达式紧凑且直观易懂无用。