繁体   English   中英

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

[英]Java regular expression to find occurence of a particular substring n times

我有一个带字母的字符串,后跟数字(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来匹配它?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM