【问题标题】:Difference between * and + regex* 和 + 正则表达式之间的区别
【发布时间】:2012-06-01 14:11:30
【问题描述】:

谁能告诉我下面示例中*+ 运算符之间的区别:

[<>]+[<>]*

【问题讨论】:

标签: regex


【解决方案1】:

每一个都是量词,星号量词(*)表示前面的表达式可以匹配0次或多次,就像{0,}一样,而加号量词(+)表示前面的表达式必须匹配至少一次或多次,它与 {1,} 相同。

所以回顾一下:

a*  ---> a{0,}  ---> Match a or aa or aaaaa or an empty string
a+  ---> a{1,}  ---> Match a or aa or aaaa but not a string empty

【讨论】:

【解决方案2】:

* 表示零个或多个,+ 表示一个或多个。所以不同的是空字符串会匹配第二个表达式而不是第一个。

【讨论】:

  • 这不是反过来吗? * 将匹配空,但 + 不会。
  • 我相信 Ismail 指的是 OP 的样本模式([<>]+[<>]*),而不是这个答案中讨论的量词的顺序。我同意,这有点模棱两可。
【解决方案3】:

+ 表示一个或多个前一个原子。 ({1,})

* 表示零个或多个。除了方括号表达式中指定的字符之外,这不能匹配任何内容。 ({0,})

请注意,+ 在扩展和 Perl 兼容的正则表达式中可用,但在 Basic RE 中不可用。 * 适用于所有三种 RE 方言。您使用的方言很可能取决于您使用的语言。

几乎,在现代操作系统中,仍然默认使用 BRE 的只有 grepsed(两者都具有 ERE 功能作为选项)和非 vim vi

【讨论】:

    【解决方案4】:

    它们是量词。

    • + 表示 1 或多个(匹配成功至少出现一次)
    • * 表示 0 或多个(匹配成功,无论搜索字符串是否存在)

    【讨论】:

      【解决方案5】:

      * 表示前面的表达式的零个或多个。

      换句话说,表达式是可选的。

      你可以这样定义一个整数:

      -*[0-9]+

      换句话说,一个可选的负号后跟一个或多个数字。

      【讨论】:

        【解决方案6】:

        [<>]+[<>][<>]* 相同

        【讨论】:

          【解决方案7】:

          我将举一些例子来扩展上面的答案。让我们有一个文本:

          100test10
          test10
          test
          

          如果我们写\d+test\d+,这个表达式匹配100test10test10,但\d*test\d*匹配其中三个

          【讨论】:

            猜你喜欢
            • 2013-09-18
            • 2016-11-18
            • 2012-02-22
            • 2023-04-07
            • 1970-01-01
            • 2013-12-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多