【问题标题】:Java regex. Why this is false (eclipse expression debugger)Java 正则表达式。为什么这是错误的(eclipse 表达式调试器)
【发布时间】:2016-11-26 08:01:39
【问题描述】:

为什么返回 false?

"$10+".matches("^\\\\${0,1}[1-9,\\\\.]{0,}[\\\\+kK]{0,}")

我使用 eclipse 调试器,所以这就是使用 \\\\ 而不是 \\ 的原因

第一个符号匹配^\\\\${0,1} 数字或逗号或点匹配到[1-9,\\\\.]{0,} 最后一个符号 + 或 k 或 K 应该匹配 [\\\\+kK]{0,}

但是返回假。为什么?

【问题讨论】:

  • [1-9,\\\\.]{0,} 匹配 1 但不匹配其后的 0。我猜你想要0-9

标签: java regex eclipse


【解决方案1】:

集合中没有零,应该是:

"$10+".matches("^\\${0,1}[0-9,\\.]{0,}[\\+kK]{0,}"

或者也许(如果你想在开头有非零):

"$10+".matches("^\\${0,1}[1-9\\.][0-9,\\.]{0,}[\\+kK]{0,}"

另外,在字符组中不需要转义+,不确定“。”是否相同.

【讨论】:

  • 你说得对!看来我需要休息一会儿了:)
  • 为什么要在字符类中转义加号? [\\+] -> [+]{0,1} = ?
【解决方案2】:

我用 JUnit 测试了你的表达方式。

@Test
public void testRegex() throws Exception {
    assertTrue("$10+".matches("^\\${0,1}[0-9,\\\\.]*[\\\\+kK]*"));
}

它现在返回 true。我将您的选项 {0,} 更改为 *。

【讨论】:

    猜你喜欢
    • 2010-09-22
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2011-06-15
    • 2013-04-19
    相关资源
    最近更新 更多