返回信息流一个字符串以下形式:abc{yyyy-MM-dd}.txt,能不能用正则表达式将括号里的字符串提取出来? 能不能用正则表达式验证这个字符串的格式是否符合? 十分感谢
格式为字串中大括号必须匹配,并且出现0或者一次。
abc.txt right
abc{{}}.txt wrong
abc{{.txt wrong
abc{yyyy-MM-dd}{yyyy-MM-dd}.txt wrong
这是一条镜像帖。来源:北邮人论坛 / java / #13177同步于 2010/2/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
请教java正则表达式
newstar19870
2010/2/2镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
不知道java的正则能不能直接用。
反正正则可以写成, abc\{\d{4}-\d{2}-\d{2}\}\.txt,然后要把那个东西提取出来,要用group吧。
【 在 ericyosho 的大作中提到: 】
: 不知道java的正则能不能直接用。
: 反正正则可以写成, abc\{\d{4}-\d{2}-\d{2}\}\.txt,然后要把那个东西提取出来,要用group吧。
怎么验证这个字符串是否符合格式呢? 用哪个匹配? 谢谢
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语法应该没问题,没测试过。
【 在 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},前面那个提取不出来?
因为*是贪婪的。试试*?
.*?\{(.+)}\\}
或者你既然用了find而不是matches或者lookingAt,那么表达式就直接用
\\{(.+)\\}
就行了吧。
【 在 wks 的大作中提到: 】
: 因为*是贪婪的。试试*?
: .*?\{(.+)}\\}
: 或者你既然用了find而不是matches或者lookingAt,那么表达式就直接用
: ...................
嗯 我find和 matches 弄混了