java之的正则表达式

正则表达式即:用来描述或匹配符合一系列语法规则的某个字符串的单个字符串;

例如:校验QQ号码,校验规则为:非数字0开头,位数为5-15位,所有位全为数字;

下面是非用正则校验代码:

 1 public static boolean checkQQ(String s) {
 2     boolean flag = true;
 3     if(!(s.startsWith("0"))) {
 4         if(!(s.length() >= 5 && s.length() <= 15)) {
 5             flag = false;
 6         }
 7         char[] ch = s.toCharArray();
 8         
 9         for (int i = 0; i < ch.length; i++) {
10             char c = ch[i];
11             if(!(c >= '0' && c <= '9')) {
12                 flag = false;
13                 break;
14             }
15         }
16     }else {
17         flag = false;
18     }
19     
20     return flag;
21 }

下面是正则校验QQ代码:

 1 String regex = "[1-9]\\d{4,14}"; //正则表达式校验QQ号码 2 System.out.println("123456789".matches(regex)); 

2.    正则校验规则

[]:代表校验单个字符

^:代表非(即相反)

&&:代表取交集

[abc]:代表匹配a或b或c

[^abc]:代表匹配除了abc的其他任意字符

[a-zA-Z]:代表匹配52个大小写字母

[a-z&&[def]]:代表匹配d或e或f(取交集)

.  代表任何单个字符
\d  代表任意单个数字   同[0-9]            反斜杠 \ 需要多加一个反斜杠 \ 进行转义
\D  代表任意单个非数字  同[^0-9]
\s  代表空白字符     同[ \n\r\x0B\t\f]
\S  代表非空白字符
\w  代表单词字符   同[a-zA-Z_0-9]
\W  代表非单词字符

Greedy 数量词
X? X:       一次或一次也没有
X* X:       零次或多次
X+ X:       一次或多次
X{n} X:     恰好n次
X{n,} X:    至少n次
X{n, m} X:  至少n次,但是不超过m次

 1 private static void demo5() {
 2     String regex = "\\w";
 3     System.out.println("a".matches(regex));   //true
 4     System.out.println("%".matches(regex));   //false
 5 }
 6 
 7 private static void demo4() {
 8     String regex = "\\s";
 9     System.out.println(" ".matches(regex));
10     System.out.println("    ".matches(regex));   // 一个tab 键    结果为true
11     System.out.println("    ".matches(regex));   // 四个空格         结果为false
12 }
13 
14 private static void demo3() {
15     String regex = "\\D";
16     System.out.println("a".matches(regex)+"123");
17 }
18 
19 private static void demo2() {
20     String regex = "\\d";
21     System.out.println("1".matches(regex));
22 }
23 
24 private static void demo1() {
25     String regex = ".";
26     System.out.println("a".matches(regex));
27 
1 public static void demo6() {
2     String regex = "[abc]?";
3     System.out.println("a".matches(regex));
4 }
1 public static void demo7() {
2     String regex = "[abc]{5}";                    //恰好5次
3     System.out.println("abcdb".matches(regex));   //false
4     System.out.println("abcba".matches(regex));   //true
5 }

 正则表达式之分割:split(正则表达式)   注意用小数点进行分割的时候,需要用两个反斜杠进行转义才能代表小数点

1 String s = "abc.def.hsg";
2 String[] arr = s.split("\\.");    //NB:这里用点分割时正则表达式的点需要用两个反斜杠进行转义
3 for (int i = 0; i < arr.length; i++) {
4     
5     System.out.println(arr[i]);
6 }

 正则表达式之替换:replace(regex, replacement)

 1 String s = "wo1keyi3de";

2 String regex = "\\d";

3 String str = s.replaceAll(regex, "");

4 System.out.println(str); 

正则表达式之分组: ()

 1 public static void demo3() {
 2     String s = "我...我..我.....爱....学.学..编程..程";
 3     //替换字符串,将字符串替换成"我爱学编程"
 4     String str = s.replaceAll("\\.+", "");
 5     String str1 = str.replaceAll("(.)\\1+", "$1");  //$1 代表第一组中的内容
 6     System.out.println(str1);
 7 }
 8 
 9 public static void demo2() {
10     String s = "abbcdddeggggkhj";
11     //以叠词分割字符串
12     String regex = "(.)\\1+";
13     String[] arr = s.split(regex);
14     for (int i = 0; i < arr.length; i++) {
15         System.out.println(arr[i]);
16     }
17 }
18 
19 public static void demo1() {
20     String regex = "(.)\\1(.)\\2";     
21     //  \\1 代表第一个组再出现一次  \\2 代表第二个组再出现一次
22     System.out.println("aacc".matches(regex));
23 }

正则表达式之Pettern类:

1 //找出所有的手机号码
2 String s ="我的手机号是13412345678,曾经用过18900000000";
3 
4 String regex = "1[835647]\\d{9}";
5 Pattern p = Pattern.compile(regex);
6 Matcher m = p.matcher(s);
7 while (m.find()) {
8     System.out.println(m.group());
9 }

猜你喜欢

转载自www.cnblogs.com/jiangjunwei/p/java_regex.html