【问题标题】:Regex in Java: a*Java 中的正则表达式:a*
【发布时间】:2013-02-01 15:04:00
【问题描述】:

你知道为什么在一个简单的正则表达式模式中如果放 a*(quantifier) 它不匹配匹配器中的任何结果,即使它实际上包含字符 a; (在任何情况下,它都应该返回一个发现空字符串的结果,因为我正在使用“”)。 它适用于其他字符,例如 r* 和 b* 没有问题。 我知道如果内容放在引号或括号之间,它会起作用。(“a *”)。 虽然只是想知道为什么它可以使用不带引号的 b* 而不带引号的 a* 。

代码:

Pattern pat = Pattern.compile(args[0]);
        Matcher match = pat.matcher(args[1]);
while (match.find())
        {
            System.out.println("Indeed this the information I need:"+ match.group());

            System.out.println("Here it starts:"+match.start());
}       

我知道 'a' 是元字符,但 'e' 和 'f' 也是元字符,并且它们可以正常工作。

我在命令行中插入:args[0] = a* args[1] = abba。

有什么想法吗?提前致谢。

【问题讨论】:

    标签: java regex metacharacters


    【解决方案1】:

    为了选择您的正则表达式必须是这样的:"(a*)" 并且您对 group(1) 感兴趣

    【讨论】:

      【解决方案2】:

      可能是因为 * 正在被运行 Java 的 shell 扩展。尝试打印出args[0] 的内容,我想你会发现你匹配的模式不是你认为匹配的模式。

      您可以通过引用您的论点来解决此问题 - 'a*' 而不仅仅是 a*

      【讨论】:

      • 嗨,Amber,你是对的!但为什么会这样!?它在 animable.class 中扩展为我之前创建的接口的类文件。有什么办法可以清除 shell 中不需要的快捷方式缓存?
      • * 是内置于 shell 中的通配符,而不是特定的快捷方式。 a* 对 shell 表示“当前目录中以 a 开头的任何文件”。如果您不想扩展通配符,则需要引用您的论点。
      猜你喜欢
      • 2014-04-23
      • 2015-12-29
      • 2017-09-19
      • 2015-04-27
      • 2016-09-28
      • 2013-01-18
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多