【问题标题】:What's the difference between regex [-+]? and (-|+)? [duplicate]正则表达式 [-+] 有什么区别?和(-|+)? [复制]
【发布时间】:2013-10-07 18:38:44
【问题描述】:

正则表达式有什么区别

[-+]? 

(-|+)?

它们的意思不是一样的吗?

【问题讨论】:

  • 我不想破坏心情,但是this might be a good helper
  • Alma 和 HamZa,你喜欢苹果吗?
  • @LievenCardoen 不,我喜欢 windows 或 linux :)

标签: regex


【解决方案1】:

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

更新

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

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

【讨论】:

  • 从 Flex/Bison 书中获得。不知道为什么他们使用两个正则表达式并排使用(不使用反向引用)...
【解决方案2】:

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

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

(?:-|+)?

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 2013-11-09
      • 2013-04-16
      • 2021-07-14
      相关资源
      最近更新 更多