1

正则表达式有什么区别

[-+]? 

(-|+)?

他们的意思不一样吗?

4

3 回答 3

8

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

更新

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

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

于 2013-10-01T14:34:03.677 回答
2

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

即使这在不捕获组中的文本的情况下也是等效的:

(?:-|+)?
于 2013-10-01T14:34:15.897 回答
-2

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

所以确实没有区别(除了其他人提到的捕获),但这并不意味着其他运算符在使正则表达式紧凑且易于理解方面没有用处。

于 2013-10-01T14:45:46.480 回答