【问题标题】:How .* (dot star) works? [closed].*(点星)如何工作? [关闭]
【发布时间】:2012-10-01 02:06:26
【问题描述】:

我已经明白.* 表示零个或多个任意字符,但是 有人能解释一下.* 在下面的工作中是如何工作的吗?

.*([a-m/]*).*

.*([a-m/]+).*

.*?([a-m/]*).*

【问题讨论】:

  • 在正则表达式中,. 指代任何字符,可以是数字、aplhabet 字符或任何其他特殊字符。 * 表示零次或多次。
  • 这很简单 - 任何符号,出现零次或多次 - 但其中有 的细微差别。更重要的是,它是正则表达式中一个极其核心的概念。立即出去阅读有关正则表达式的背景资料。这样你会走得更远、更快。

标签: regex


【解决方案1】:

点表示任何东西都可以到这里,星表示至少 0 次 所以.* 接受任何字符序列,包括空字符串。

【讨论】:

  • 你是怎么做到的?您回答了“不是一个真正的问题”。
  • @Thereisnothingwecando:“关闭为不是一个真正的问题...... 2012 年 10 月 2 日 9:38”。 Ionut 更早地回答了,(当它仍然是一个真正的问题时:))。
【解决方案2】:

每种情况都不一样:

.*([a-m\/]*).*

第一个.* 可能会匹配整个字符串,因为[a-m/] 不需要存在,而第一个* 是贪婪的,并且首先出现。

.*([a-m\/]+).*

第一个 .* 将匹配整个字符串,直到匹配 [a-m/] 的最后一个字符,因为只需要一个,第一个 * 是贪婪的,并且首先出现。

.*?([a-m\/]*).*

第一个.*? 将匹配字符串直到匹配[a-m/] 的第一个字符,因为*? 不是贪婪的,然后[a-m/]* 将匹配所有它可以匹配的,因为* 是贪婪的,然后最后一个 .* 将匹配字符串的其余部分。

【讨论】:

  • 第三种情况有错误。正如您自己写的那样,[a-m/] 后面是 *,而不是您之后考虑的 +。因此,根据您对第一种情况的说法,“[a-m/] 不需要在场”。那么哪个优先呢?
  • 第三个例子,最后一个.*不是贪心,因为没有greedy的选项,对吧?
【解决方案3】:

.* 在您的示例中的功能是确保包含表达式可以被任何东西(或什么都没有)包围。点代表任意字符,星号表示前面的字符可以重复任意次数(或根本不重复)。

【讨论】:

    【解决方案4】:

    .* 表示“任意字符,任意重复次数。”

    【讨论】:

      猜你喜欢
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2012-05-08
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多