正则表达式其实就是用于操作字符串的一个规则,使用了特殊的符号表示
正则表达式对字符串的操作:
匹配:matches();
预定义字符:
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字:[^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]——包括了小写字母,大写字母,下划线,数字0-9
\W 非单词字符:[^\w]
注意:任何预定义字符没有加上数量词之前都只能匹配一个字符
public class Demo1{ public static void main(String[] args){ System.out.println("任意字符:"+("1".matches("."))); System.out.println("数字字符:"+("12".matches("\\d\\d")));//“\”都是有特殊含义的,所以要\\d System.out.println("非数字字符:"+("@".matches("\\D"))); System.out.println("空白字符:"+("\r".matches("\\s"))); System.out.println("非空白字符:"+("\n".matches("\\S"))); System.out.println("单词字符:"+("#".matches("\\w"))); System.out.println("非单词字符:"+("a".matches("\\W"))); } }
运行结果:
任意字符:true 数字字符:true 非数字字符:true 空白字符:true 非空白字符:false 单词字符:false 非单词字符:false
数量词:
greedy 数量词
X?X 一次或一次也没有
X*X 零次或多次
X+X 一次或多次
X{n}X 恰好n次
X{n,}X 至少n次
X{n,m}X 至少n次,但是不超过m次
class Demo2{ public static void main(String[] args){ System.out.println("?一次或一次也没有:"+("".matches("\\d?"))); System.out.println("*零次或多次:"+("".matches("\\d*"))); System.out.println("+至少出现一次:"+("".matches("\\d+"))); System.out.println("{}恰好出现n次:"+("12345".matches("\\d{5}"))); System.out.println("{n,}至少要出现指定次数:"+("1234".matches("\\d{5,}"))); System.out.println("{n,m}出现次数范围在n-m次:"+("123".matches("\\d{2,5}"))); } }
运行结果:
?一次或一次也没有:true *零次或多次:true +至少出现一次:false {}恰好出现n次:true {n,}至少要出现指定次数:true {n,m}出现次数范围在n-m次:true
范围词:字符类
[abc] a、b或c(简单类)
[^abc] 任何字符,除了a、b或c(否定)
[a-zA-Z] a到z或A到Z,两头的字母包括在内(范围)
[a-d[m-p]] a到d或m-p:[a-dm-p](并集)
[a-z&&[def]] d、e或f(交集)
注意:范围词里面不管内容有多长,没有数量词的配合都只能匹配一个字符。
class Demo2{ public static void main(String[] args){ System.out.println("出现的字符只能是:"+("d".matches("[abc]"))); System.out.println("出现的字符除了ab::"+("d".matches("[^ab]"))); System.out.println("出现的字符只能是a-z和A-Z、&、#:"+("A".matches("[a-zA-Z#&]"))); System.out.println("出现的字符只能是a-z和A-Z:"+("d".matches("[a-z[A-Z]]"))); } }
运行结果:
出现的字符只能是:false 出现的字符除了ab::true 出现的字符只能是a-z和A-Z、&、#:true 出现的字符只能是a-z和A-Z:true