【问题标题】:Java PatternSyntaxException when first character of regex is *正则表达式的第一个字符为 * 时的 Java PatternSyntaxException
【发布时间】:2015-08-29 23:33:35
【问题描述】:

所以我有这个 Java 代码的 sn-p:

Pattern p = Pattern.compile("* bar");
Matcher m = p.matcher("foo bar");
System.out.println(m.find());

但是当我运行它时,我收到以下错误:

线程“main”中的异常 java.util.regex.PatternSyntaxException:在索引 0 附近悬空元字符 '*' * 酒吧 ^

不知道为什么会发生这种情况,因为当我将 Pattern p = Pattern.compile("* bar") 替换为 Pattern p = Pattern.compile("foo *") 时 一切都按预期工作,控制台输出 true。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    * 在正则表达式中有一个special meaning 重复零次或多次(又名空字符串、x、xx 等等都会以x* 为例)。

    当它在开始时,正则表达式引擎不知道要重复什么,因此出现错误。在第二个示例中,您说的是 foo,后跟零个或多个空格。

    如果您想匹配文字 *,则必须对其进行转义 - \\*。

    【讨论】:

    • @bowTI,你可以使用bar$。 $ 是行尾的锚点。
    • @bowTI,另外,如果你想让整个字符串与之匹配,你可以使用.*bar$。
    • 你也可以参考javadoc。
    【解决方案2】:

    * 在正则表达式中表示前面符号的零次或多次重复。由于您没有指定任何前面的符号,因此您会收到错误消息。您可以使用. 来表示任何字符。因此,对于您的用例,您可以将正则表达式编写为 .* bar。

    【讨论】:

      猜你喜欢
      • 2014-09-26
      • 1970-01-01
      • 2011-03-29
      • 2015-05-21
      • 2015-04-09
      • 2012-03-16
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多