使用正则表达式从Java中匹配的字符串中提取组

使用正则表达式从Java中匹配的字符串中提取组,java,regex,Java,Regex,我有一个字符串列表,其中包含如下值: String [] arr = {"${US.IDX_CA}", "${UK.IDX_IO}", "${NZ.IDX_BO}", "${JP.IDX_TK}", "${US.IDX_MT}", "more-elements-with-completely-different-patterns-which-is-irrelevant"}; 我正试图从这个列表中提取所有IDX_XX。所以从上面的列表中,我应该有,IDX_CA,IDX_IO,IDX_BO等等,在

我有一个字符串列表,其中包含如下值:

String [] arr = {"${US.IDX_CA}", "${UK.IDX_IO}", "${NZ.IDX_BO}", "${JP.IDX_TK}", "${US.IDX_MT}", "more-elements-with-completely-different-patterns-which-is-irrelevant"};
我正试图从这个列表中提取所有IDX_XX。所以从上面的列表中,我应该有,IDX_CA,IDX_IO,IDX_BO等等,在Java中使用regex

我编写了以下代码:

Pattern pattern = Pattern.compile("(.*)IDX_(\\w{2})");
for (String s : arr){
     Matcher m = pattern.matcher(s);
      if (m.matches()){
        String extract = m.group(1);
        System.out.println(extract);
      }
}
但这不打印任何内容。有人能告诉我我犯了什么错误吗。谢谢。

使用以下修复程序:

String [] arr = {"${US.IDX_CA}", "${UK.IDX_IO}", "${NZ.IDX_BO}", "${JP.IDX_TK}", "${US.IDX_MT}", "more-elements-with-completely-different-patterns-which-is-irrelevant"};
Pattern pattern = Pattern.compile("\\bIDX_(\\w{2})\\b");
for (String s : arr){
     Matcher m = pattern.matcher(s);
      while (m.find()){
        System.out.println(m.group(0)); // Get the whole match
        System.out.println(m.group(1)); // Get the 2 chars after IDX_
      }
}
请参阅,输出:

注释

  • 使用
    \bIDX(\w{2})\b
    模式,该模式匹配
    IDX
    和单词边界之间的2个单词字符,并将
    IDX
    之后的2个字符捕获到组1中
  • m.matches
    需要完整的字符串匹配,因此将其替换为
    m.find()
  • 如果
    替换为
    ,而
    如果字符串中有多个匹配项
  • m.group(0)
    包含整个匹配值
  • m.group(1)
    包含组1的值

谢谢,它很有效。请问,如果我只想提取IDX_u2;后的2个字符,我怎么做(不在当前返回值上使用String.split)?@Adhyatmik然后使用
Pattern Pattern=Pattern.compile(\\bIDX_2;(\\w{2})\\b”)
System.out.println(m.group(1))
IDX_CA
CA
IDX_IO
IO
IDX_BO
BO
IDX_TK
TK
IDX_MT
MT