选择包含以下字符串中的字母和数字的字符串

时间:2017-09-20 07:13:22

标签: java regex string

package regEx;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ReGex {

    public static void main(String[] args) {

        String[] s = {"asd", "123", "123abc", "@#$", "ASSF"};
        Pattern p = Pattern.compile("^[A-Z]*[a-z]*[0-9]*+$");
        for (String s1 : s) {
            Matcher m = p.matcher(s1);
            if (m.find()) {
                System.out.println(s1);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

为什么不只是s1.matches("[A-Za-z0-9]+")

String[] s = {"asd", "123", "123abc", "@#$", "ASSF"};
for (String s1 : s) {
    if (s1.matches("[A-Za-z0-9]+")) {
        System.out.println(s1);
    }
}

您的正则表达式^[A-Z]*[a-z]*[0-9]*+$并不意味着匹配字母数字字符串,这意味着:

  • ^字符串开头
  • 应以零或多个大写字母[A-Z]*
  • 开头
  • 后跟零或更多下方字母[a-z]*
  • 后跟零个或多个降级[0-9]*
  • +我不知道为什么会这样
  • $字符串结尾

修改

我认为您的意思是输入应包含两个字母和数字,在这种情况下,您可以使用此正则表达式(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)

if (s1.matches("(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)")) {