【发布时间】:2013-02-12 15:19:15
【问题描述】:
我是正则表达式(和 java)的新手,所以这可能是一个简单的问题。 我正在尝试匹配行尾的字符 {。我的尝试就是这样:
row.matches("{$")
row.matches("\{$")
但两者都只是给
线程“主”java.util.regex.PatternSyntaxException 中的异常:非法重复
我做错了什么?
【问题讨论】:
我是正则表达式(和 java)的新手,所以这可能是一个简单的问题。 我正在尝试匹配行尾的字符 {。我的尝试就是这样:
row.matches("{$")
row.matches("\{$")
但两者都只是给
线程“主”java.util.regex.PatternSyntaxException 中的异常:非法重复
我做错了什么?
【问题讨论】:
row.matches("^.*\\{$");
您只需要转义 {,因为它是一个元字符。因为 Java 为特殊上下文(\n、\r 等)保留了一个反斜杠,所以需要两个反斜杠来为 Pattern 生成一个反斜杠。因此,
\\{
将正确评估为
\{
不仅如此,matches 方法还会检查整个字符串是否匹配,而不仅仅是一个子集。因此,^.* 部分
【讨论】:
row.matches("^.*\\{$");,只是为了好玩。
您必须转义 { 字符,因为它是正则表达式的特殊字符
row.matches("\\{$")
【讨论】:
转义尖括号有效吗?
如\\{$
试过了
hello world{
whatever{
hello{dontmatch
}
}
匹配 world{ 和 whatever{ 但不匹配 hello{dontmatch
【讨论】:
您需要使用\ 转义{,但为了防止\{ 被读取为特殊字符(如换行的\n),您还需要使用\ 转义额外的\ 导致:
row.matches("\\{$");
【讨论】: