1

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

row.matches("{$")

row.matches("\{$")

但两者都只是给

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

我究竟做错了什么?

4

4 回答 4

4
row.matches("^.*\\{$");

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

\\{

将正确评估为

\{

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

于 2013-02-12T15:20:32.903 回答
2

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

row.matches("\\{$")
于 2013-02-12T15:21:05.480 回答
2

转义尖括号有效吗?

如在\\{$

试过反对

hello world{
    whatever{
    hello{dontmatch
    }
}

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

于 2013-02-12T15:22:56.600 回答
2

您需要{使用 an转义,\但为了防止将 the\{读取为特殊字符(如\n换行符),您还需要\使用额外的\结果来转义:

row.matches("\\{$");
于 2013-02-12T15:26:51.873 回答