java 匹配大括号内容

表达式"\\$\\{[^}]*\\}"中的[^}]该如何理解... 表达式"\\$\\{[^}]*\\}"中的[^}]该如何理解 展开
 我来答
百度网友289c0c0
2018-07-22 · TA获得超过4183个赞
知道大有可为答主
回答量:1531
采纳率:89%
帮助的人:623万
展开全部
[^}]表示不包括右大括号即可。
根据你的正则表达式,以下语句均合法:
${anythingYouNeed}
${0123$4{}
${}
换成{ 一样能用。
追问
换成{不能用,我亲自运行过
String jsonStr = "{\"header\":{\"name\":\"${name}\",\"time\":\"20170310154522\","
+ "}";
System.out.println(jsonStr);

String FuncKey = "\\$\\{[^{]*\\}";
Pattern p = Pattern.compile(FuncKey);
Matcher m = p.matcher(jsonStr);
while(m.find()) {
System.out.println(m.group());
}
输出成这样:
${name}","time":"20170310154522",}
正确是这样:
${name}
追答
${name}","time":"20170310154522",}
这个结果难道不对吗?

换成{之后,正则表达式就变成了开头为${,然后匹配任意数量不为{的字符,然后匹配}。
当然是\\$\\{[^}]*\\} 才能获得你想要的结果啊。因为这是在匹配任意数量不为}的字符,然后匹配}。
yinfengnong
2018-07-22 · TA获得超过5619个赞
知道大有可为答主
回答量:2344
采纳率:89%
帮助的人:2290万
展开全部
^在方括号中表示否定,[^}] 的意思是匹配除 } 之外的字符。
更多追问追答
追问
为什么是字符},换成{就不能使用
追答
你要匹配 { } 之间的内容,遇到 { 开始匹配,遇到 } 就停止匹配,如果换成 { 那就匹配不了。如果换 { 那就意味着匹配 {  { 之间的内容。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式