【问题标题】:Regex Odd/Even Amount正则表达式奇/偶数量
【发布时间】:2013-08-04 07:52:59
【问题描述】:

我有一个不知道该怎么做的正则表达式问题。 它必须匹配开头包含任意数量 a 的所有字符串,如果 a 的数量是偶数,则匹配单个 0,如果 a 的数量是奇数,则匹配单个 1。

如何跟踪偶数/奇数?

样本

  • aaa1
  • aaaa0

【问题讨论】:

  • 你有没有尝试过?
  • 粘贴一些示例字符串。

标签: java regex


【解决方案1】:

^(a(aa)*1|(aa)+0)$

^(?:a(?:aa)*1|(?:aa)+0)$ 如果您正在使用捕获。

第一部分:a(aa)*1 将匹配任意奇数个 a 后跟一个,第二部分:(aa)+0 将匹配任意偶数个 a 后跟一个零。

您无法跟踪正则表达式中模式组件的匹配次数。他们没有记忆。幸运的是,在这种情况下,您可以绕过这个限制。

【讨论】:

  • 感谢您的回答,您能解释一下吗?:,我知道吗?表示 0 或 1,但它们一起意味着什么?
  • (?:pattern) 只是 Java 中 (pattern) 的非捕获等价物。如果您没有在匹配器中检查组,那么这两种模式都是等效的。在这种情况下,它并不意味着 0 或 1。docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
【解决方案2】:

你可以使用:

^(?:aa)*(?:a1|0)$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2015-07-06
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多