Java正则表达式和转义元字符

3
我正在尝试编写正则表达式以匹配两个花括号之间嵌入的令牌。例如,如果缓冲区为Hello {World},我想从字符串中获取"World"令牌。当我使用类似于\{*\}的正则表达式时,Eclipse会显示错误消息:

无效转义序列(有效的是\b \t \n \f \r \" \' \\

请问有谁能帮帮我吗?我是新手,不太懂如何使用正则表达式。

@Rajnikanth:尝试使用双斜杠\代替单斜杠\来进行转义序列。 - AabinGunz
www.regular-expressions.info上有一份非常出色的在线教程。在那里花费几个小时将会使你受益无穷。祝你正则表达式编程愉快! - ridgerunner
4个回答

5

使用以下代码来匹配 {} 之间的字符串

String str = "if buffer Hello {World}";
Pattern pt = Pattern.compile("\\{([^}]*)\\}");
Matcher m = pt.matcher(str);
if (m.find()) {
    System.out.println(m.group(0));
}

为什么当一个“}”已经在方括号中时,你还要对其进行转义? - tchrist
没错,方括号里我不需要转义它。在你的评论后进行了修复,非常感谢。 - anubhava

3
你应该能够通过使用正则表达式{(\w*)}从类似"{token}"的字符串中提取令牌。 圆括号()在\w*捕获的零个或多个单词字符周围形成一个捕获组。 如果字符串匹配,请通过调用Matcher类的group()方法从捕获组中提取实际令牌。
Pattern p = Pattern.compile("\\{(\\w*)\\}");

Matcher m = p.matcher("{some_interesting_token}");

String token = null;
if (m.matches()) {
 token = m.group();
}

请注意,token可能是一个空字符串,因为正则表达式{\w*}将匹配“{}”。如果您想匹配至少一个令牌字符,请改用{\w+}。

小心:在 JDK6 中,\w 仍然表示只有7位数据。"在下一个版本中修复" :) - tchrist

1

尝试在Java中使用双反斜杠转义字符,使用\\{[\\w]*\\}


你为什么要在\w周围加上括号? - tchrist
@tchrist:寻找一个模式 - AabinGunz
2
不,你不需要它们。[\w]\w没有任何不同之处。这只会让人感到困惑。 - tchrist

0
你需要在正则表达式中转义 {}。如果只是提取大括号之间的所有内容,正则表达式应该是:
\\{.\\}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接