一、正则表达式
正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。
二、常用的正则表达式组成规则
1.字符
x 字符 x
\ 反斜线字符
\t 制表符(‘\u0009’)
\n 新行(换行符)符(‘\u000A’)
\r 回车符(’\u000D’)
\f 换页符(‘\u000C’)
2.字符类
[abc] a、b或c(简单类)
[^abc] 任何字符。除了a、b、或c(否定含义)
[a-zA-z] a到z或A到Z,两头的字母包括在内(范围)
3.预定字符类
. 任何字符(与行结束符可能匹配也可能不匹配)如果你想单纯的表示一个.那么需要使用转义.
\d 数字:[0-9]
\D 非数字:[^0-9]
\s 空白字符:[\t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
4.边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界 how are you?
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
5.Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
三、正则表达式的功能
规则字符在java.util.regex Pattern类中
下面列举几个常用功能
(1)判断功能
public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。
案例:校验手机号码
手机号码常见组成:
18x-xxxx-xxxx
15x-xxxx-xxxx
14x-xxxx-xxxx
13x-xxxx-xxxx
16x-xxxx-xxxx
17x-xxxx-xxxx
19x-xxxx-xxxx
代码实现:
import java.util.Scanner;
public class RegexDemo{
public static void main(String[] args){
checkPhoneNumber();
}
private static void checkPhoneNumber(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入手机号码:");
String phoneNumber = sc.nextLine();
String regex = "1[3456789]\\d{9}";
boolean b = phoneNumber.matches(regex);
sysout.out.println(b);
}
} }
(2)分割功能
public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。
案例:拆分字符
代码实现:
import java.util.Arrays;
public class RegexDemo2 {
public static void main(String[] args) {
// ii,jj,kk
String s = "ii,jj,kk";
String regex = ",";
String[] arr = s.split(regex);
System.out.println(Arrays.toString(arr)); //[ii, jj, kk]
// ii.jj.kk
s = "ii.jj.kk";
regex = "\\.";//如果你想单纯的表示一个.那么需要使用转义\.
arr = s.split(regex);
System.out.println(Arrays.toString(arr)); //[ii, jj, kk]
}
}
(3)替换功能
public String replaceAll(String regex,String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
案例:将数字字符用*替代
代码实现:
public class RegexDemo3{
public static void main(String[] args){
String s = "你加我微信,我的微信号是xzy1242,我送你小礼物";
regex = “[\\d]”;
String s2 = s.replaceAll(regex,"*");
System.out.println(s2);
}
}