【问题标题】:Java regex how to get value in brackets [duplicate]Java正则表达式如何获取括号中的值[重复]
【发布时间】:2025-12-23 09:20:21
【问题描述】:
 lineIdentifier:dasda creationDate:[08/06/2018 00:00:00 TO *] text: [dasda, lll]

对于regex,我只想取回creationDate 中的数据

08/06/2018 00:00:00*

这是我的模式,但不起作用

Pattern r = Pattern.compile("\\[(\\w*)\\]");
        Matcher m = r.matcher(result);

        if (m.find( )) {
            System.out.println("Found value: " + m.group(0) );
        }else {
            System.out.println("NO MATCH");
        }

知道我在做什么吗?

【问题讨论】:

  • m.group(0) 是整个匹配项。你想要m.group(1)
  • 我总是不匹配
  • 你的字符串总是这样格式化吗?然后你可以得到 [ 和 ] 的索引并与 substring() 一起使用
  • \w代表什么字符? [....] 中您要查找的所有字符是否都与之匹配(记住空格也是一个字符)?

标签: java regex


【解决方案1】:

你可以试试:

Pattern r = Pattern.compile(".*(creationDate:\\[(.+?) TO (.+?)\\]?).*");
Matcher m = r.matcher("lineIdentifier:dasda creationDate:[08/06/2018 00:00:00 TO *] text: [dasda, lll]");

if (m.find( )) {
      System.out.println("Found value: " + m.group(2) );
      System.out.println("Found value: " + m.group(3) );
}else {
      System.out.println("NO MATCH");
}

【讨论】:

  • @Lino 为什么? OP 不想检查正则表达式是否 匹配 整个文本,而是要 find 它的特定部分。改进这个答案不会使用matches(),而是在正则表达式的开头和结尾删除不必要的.*
  • @Pshemo 你是对的,要么使用matches.*,要么使用find 而不使用.*