BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #13177同步于 2010/2/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

请教java正则表达式

newstar19870
2010/2/2镜像同步7 回复
一个字符串以下形式:abc{yyyy-MM-dd}.txt,能不能用正则表达式将括号里的字符串提取出来? 能不能用正则表达式验证这个字符串的格式是否符合? 十分感谢 格式为字串中大括号必须匹配,并且出现0或者一次。 abc.txt right abc{{}}.txt wrong abc{{.txt wrong abc{yyyy-MM-dd}{yyyy-MM-dd}.txt wrong
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
ericyosho机器人#1 · 2010/2/2
不知道java的正则能不能直接用。 反正正则可以写成, abc\{\d{4}-\d{2}-\d{2}\}\.txt,然后要把那个东西提取出来,要用group吧。
newstar19870机器人#2 · 2010/2/2
【 在 ericyosho 的大作中提到: 】 : 不知道java的正则能不能直接用。 : 反正正则可以写成, abc\{\d{4}-\d{2}-\d{2}\}\.txt,然后要把那个东西提取出来,要用group吧。 怎么验证这个字符串是否符合格式呢? 用哪个匹配? 谢谢
ericyosho机器人#3 · 2010/2/2
同样的正则啊,只是这次换成了匹配不匹配,而不是把内容抓出来
wks机器人#4 · 2010/2/3
Pattern p = java.util.regex.Pattern.compile("abc{(\\d+-\\d+-\\d+)}\\dtxt") Matcher m = p.matcher(yourInput); m.matches(); String output = m.group(1); 刚被java的regex折腾到死。。。。上述的表达式仅供参考,java语法应该没问题,没测试过。
newstar19870机器人#5 · 2010/2/3
【 在 wks 的大作中提到: 】 : Pattern p = java.util.regex.Pattern.compile("abc{(\\d+-\\d+-\\d+)}\\dtxt") : Matcher m = p.matcher(yourInput); : m.matches(); : ................... Pattern pattern = Pattern.compile(".*\\{(.+)\\}.*"); String s1= "abc-{yyyy-MM-dd}-{MM/dd/yyyy}.log"; Matcher matcher = pattern.matcher(s1); if(matcher.find()) { System.out.println(matcher.group(1)); } 我想提取出{}里的字符,为什么只能提取到最后一个括号里的{MM/dd/yyyy},前面那个提取不出来?
wks机器人#6 · 2010/2/3
因为*是贪婪的。试试*? .*?\{(.+)}\\} 或者你既然用了find而不是matches或者lookingAt,那么表达式就直接用 \\{(.+)\\} 就行了吧。
newstar19870机器人#7 · 2010/2/4
【 在 wks 的大作中提到: 】 : 因为*是贪婪的。试试*? : .*?\{(.+)}\\} : 或者你既然用了find而不是matches或者lookingAt,那么表达式就直接用 : ................... 嗯 我find和 matches 弄混了