如何从单个字符串中获取多个匹配的模式

How to fetch multiple matched pattern from a single string

如何使用 find() 方法获取模式并将匹配的模式存储在数组列表中

输入字符串:9547235617/7865421341

我想获取这两个数字并将其传递给数组。

目前我正在使用下面的模式编译方法来找到如下模式

Pattern number = Pattern.compile("^[789]\d{9}$");
        Matcher matcher = number.matcher(list_string);
        if (!matcher.matches()) {
            arraylist.add("No number available");
        }

    elseif (matcher.find()) {
                    arraylist.add(matcher.group());
                }
Log.e("Arraylist value is","==>"+arraylist.tostring());

在这种方法中,它总是进入第一个 if 条件,当尝试 运行 在线示例中其他正则表达式测试程序中的相同字符串时,它只匹配最后一个数字作为我没有的模式知道下一步该怎么做希望有人能帮忙

输出:Arraylist 值为 ==>No number available

注意:我需要获取两个数字并将其添加到数组 list.Currently 我已经对特殊字符使用拆分并将这些拆分存储到数组列表中,但我想要一个关于正则表达式的方法模式匹配。

matches() 只有在匹配完整字符串时才会 return 为真。 find() 将尝试在与正则表达式匹配的子字符串中查找下一个匹配项。

正则表达式(?<=^|\/)(?:\b[7-9]\d{9}\b)?

Java代码:

String[] aStr = {"9547235617/7865421341", "6547235617/5865421341", "4547235617/9865421341"};

for(String str: aStr) {
    Matcher matcher = Pattern.compile("(?<=^|\/)(?:\b[7-9]\d{9}\b)?").matcher(str);
    while(matcher.find()){
        if(matcher.group().equals("")) {
            System.out.print("No number available" + "\n");
        } else {
            System.out.print(matcher.group() + "\n");
        }
    }
}

输出:

9547235617
7865421341
No number available
No number available
No number available
9865421341

Code demo