正则表达式的用法
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
正则表达式的字符分类
字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到z或A到Z,两头的字母包括在内(范围)
[a-d[m-p]] a到d或m到 p:(并集)
[a-z&&[def]] d、e 或 f
[a-z&&[^bc]] [ad-z] a 到 z,除了 b 和 c)
[a-z&&[^m-p]] [a-l[q-z]] a 到 z,而非 m 到 p
预定义字符
. 任何字符
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
数量词字符
X? X,一次或零次
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
正则表达式的使用
验证纯数字
String regex = "\\d+";//正则表达式,用于验证纯数字
String str1 = "1483033";//纯数字字符串
String str2 = "628vd13";//数字字母交替
String str3 = "38hdu@.,%";//数字、字母、特殊符号
System.out.println(str1.matches(regex));//true
System.out.println(str2.matches(regex));//false
System.out.println(str3.matches(regex));//false
验证纯字母字符串
String regex = "[a-zA-Z]+";//语法解释:小写字母a-z、大写字母A-Z,一次或多次
String str1 = "ghdjjdsv";//小写字符串
String str2 = "GSDejjf";//大小写字符串
String str3 = "AGFIh824";//大小写,数字
String str4 = "6395.,*&%";//特殊字符
System.out.println(str1.matches(regex));
System.out.println(str2.matches(regex));
System.out.println(str3.matches(regex));
System.out.println(str4.matches(regex));
验证数字文本交替
String regex = "\\w+";//语法解释:\w,表示字符【数字、字母、下划线】一次或多次
String str1 = "abcd547e_fg";
String str2 = "63930>*034";
String str3 = "abcdef";
System.out.println(str1.matches(regex));//true
System.out.println(str2.matches(regex));//false
System.out.println(str3.matches(regex));//true
去掉字符串中的数字
String regex = "[0-9]+";//语法解释:数字字符,一次或多次
String str1 = "ab243cd547e_fg";
String str2 = str1.replaceAll(regex, "");
System.out.println(str2);//abcde_fg
应用 1.验证手机号
String regex = "(\\+86)?1[1-8][0-9]{9}";//语法解释:数字字符,一次或多次
String str1 = "+8610546993529";
String str2 = "13512453698";
String str3 = "+8613512453698";
String str4 = "1332489666";
System.out.println(str1.matches(regex));//false
System.out.println(str2.matches(regex));//true
System.out.println(str3.matches(regex));//true
System.out.println(str4.matches(regex));//false
应用 2.简单的验证邮箱
String regex = "\\w+@\\w+(.[a-zA-Z]+)+";
String str1 = "4842fhje@jd.cc.540";
String str2 = "468004@qq.com";
String str3 = "46557489bfj@sina.com.cn";
System.out.println(str1.matches(regex));//false
System.out.println(str2.matches(regex));//true
System.out.println(str3.matches(regex));//true