Java正则表达式,用于查找特定子字符串的出现次数n次

时间:2016-07-11 04:51:13

标签: java regex

我有一个带字母的字符串,后跟数字(1-4)。例如

String input = "A1 B1 P3 D1 D2 D3 D4 F3 F3 Z1 Z2 Z3 Z4 P2";

我希望以连续的方式找到具有所有4个数字(1到4)的字母表的字符串。在上面的示例中,它是D1 D2 D3 D4Z1 Z2 Z3 Z4

有没有可能的方法可以在java中使用RE来匹配它?

1 个答案:

答案 0 :(得分:4)

是的,您可以通过反向引用来实现。

这是一个完全可执行的程序:

import java.util.regex.*;
public class Four {
    static String input = "A1 B1 P3 D1 D2 D3 D4 F3 F3 Z1 Z2 Z3 Z4 P2";
    static Pattern four = Pattern.compile("([A-Z])1 \\12 \\13 \\14");
    public static void main(String[] args) {
        Matcher m = four.matcher(input);
        while (m.find()) {
            System.out.println(m.group(1));
        }
    }
}

输出

D
Z

你正在寻找的正则表达式是

([A-Z])1 \\12 \\13 \\14"

匹配

  • 首先,资本A到Z
  • 其次是1
  • 然后是空格
  • 然后,\1反向引用,匹配第一个括号中匹配的字符串的内容。因此,如果您之前有D1\1匹配D
  • 接下来,数字2
  • (这继续拿起3和4)。

如果您的用例允许,您可能希望用\\s+替换单个空格,即一个或多个空格字符。

修改

group(1)获取括号内匹配的值。如果将其更改为group(0),您将获取整个匹配的字符串,然后程序将输出

D1 D2 D3 D4
Z1 Z2 Z3 Z4