【问题标题】:Java Regex Illegal Escape Character in Character Class字符类中的 Java 正则表达式非法转义字符
【发布时间】:2011-09-30 00:44:50
【问题描述】:

我正在尝试确定传递给我的 Expressions 类的表达式是否具有运算符。 +-*/^ 分别表示加法、减法、乘法、除法和指数。

这段代码有什么问题?

private static boolean hasOperator(String expression)
{
    return expression.matches("[\+-\*/\^]+");
}

我认为特殊字符已正确转义,但在尝试编译时不断收到错误消息:“非法转义字符”。

感谢您的帮助。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    不要逃避不需要逃避的东西:

    return expression.matches("[-+*/^]+");
    

    应该可以正常工作。大多数正则表达式元字符(.()+* 等)在字符类中使用时会失去其特殊含义。需要注意的是[-^]。对于最后三个,您可以策略性地将它们放置在 char 类中,这样它们就不会具有特殊含义:

    • ^ 可以放在除了左括号之后的任何位置:[a^]
    • - 可以放在左括号之后或右括号之前:[-a][a-]
    • ] 可以放在左括号之后:[]a]

    但为了将来参考,如果您需要在正则表达式字符串中包含反斜杠作为转义字符,则需要将其转义两次,例如:

    "\\(.*?\\)" // match something inside parentheses
    

    所以要匹配文字反斜杠,您需要其中四个:

    "hello\\\\world" // this regex matches hello\world
    

    另一个注意事项:String.matches() 将尝试将 整个 字符串与模式匹配,因此除非您的字符串仅包含一堆运算符,否则您需要使用类似 @987654342 的东西@ 代替(或使用Matcher.find()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多