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

时间:2018-02-24 05:02:54

标签: android regex string pattern-matching regex-group

如何使用find()方法获取模式并将匹配的模式存储在arraylist

输入字符串:9547235617/7865421341

我想获取这两个数字并将其传递到一个arrary列表。

当前我使用下面的模式编译方法来查找模式如下

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值为==>无可用数字

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

1 个答案:

答案 0 :(得分:1)

matches()只有在匹配完整字符串时才会返回true。 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