java正则表达式使用不正确

                 String s = "p1&p2";
                if(s.matches(".*[0-9].*")) {         //如果字符串中有数字
                s = s.replaceAll("^[A-Za-z0-9]$", "");    //把数字+字母的组合提取出来
                for (int i = 0; i < s.length(); i++) {
                    set.add(String.valueOf(s.charAt(i)));//去重
                    System.out.println(set);
                }
}

我的正则表达式是想识别数字和字母的组合,
期望输出:
[p1,p2]
但是输出结果是所有单个字符:

img


他直接读取了第一个p和最后一个2,所以这个应该怎么解决呢


        Set set = new HashSet();
        String s = "p1&p2";
        Matcher matcher = Pattern.compile("[A-Za-z0-9]+").matcher(s);
        while (matcher.find()) {
            set.add(matcher.group());
        }
        System.out.println(set);

要找字母数字的话直接循环查找就行了,没必要替换

img