【问题标题】:matching { regular expression java匹配 { 正则表达式 java
【发布时间】:2013-02-12 15:19:15
【问题描述】:

我是正则表达式(和 java)的新手,所以这可能是一个简单的问题。 我正在尝试匹配行尾的字符 {。我的尝试就是这样:

row.matches("{$")

row.matches("\{$")

但两者都只是给

线程“主”java.util.regex.PatternSyntaxException 中的异常:非法重复

我做错了什么?

【问题讨论】:

    标签: java regex


    【解决方案1】:
    row.matches("^.*\\{$");
    

    您只需要转义 {,因为它是一个元字符。因为 Java 为特殊上下文(\n、\r 等)保留了一个反斜杠,所以需要两个反斜杠来为 Pattern 生成一个反斜杠。因此,

    \\{
    

    将正确评估为

    \{
    

    不仅如此,matches 方法还会检查整个字符串是否匹配,而不仅仅是一个子集。因此,^.* 部分

    【讨论】:

    • 嗯,这不会给出任何错误,但也不会给出任何匹配项。我的字符串肯定有一个 { 结尾。
    • @user2065207 - 愚蠢的问题;它是 { 还是 }?也就是说,您要匹配的字符串是什么?
    • 我也想过。但它确实是 {.
    • 现在我要匹配的字符串只是“aasdfg{”(只是为了尝试......)
    • 嗯。试试row.matches("^.*\\{$");,只是为了好玩。
    【解决方案2】:

    您必须转义 { 字符,因为它是正则表达式的特殊字符

    row.matches("\\{$")
    

    【讨论】:

      【解决方案3】:

      转义尖括号有效吗?

      \\{$

      试过了

      hello world{
          whatever{
          hello{dontmatch
          }
      }
      

      匹配 world{whatever{ 但不匹配 hello{dontmatch

      【讨论】:

        【解决方案4】:

        您需要使用\ 转义{,但为了防止\{ 被读取为特殊字符(如换行的\n),您还需要使用\ 转义额外的\ 导致:

        row.matches("\\{$");
        

        【讨论】:

          猜你喜欢
          • 2011-03-30
          • 2011-05-26
          • 1970-01-01
          • 1970-01-01
          • 2010-11-06
          • 2015-06-03
          • 2011-02-17
          • 2011-01-24
          相关资源
          最近更新 更多