本文列举为常用正则表达式的解释范例,想深入探索更多正则表达式请下载JDK API 中文版搜索 Pattern类。
概念:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式用法:String 变量名 = "正则表达式";
"判断字符串".matches(变量名); //或 "判断字符串".matches("正则表达式");
若判断字符串符合正则表达式的要求则返回true,若不符合则返回false。
1.字符类
[ ]:表示一个字符
[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;(交集)
[a-z&&[^bc]]:a到z,除了b和c;等价于[ad-z](减去)
[a-z&&[^m-p]]:a到z,而非m到p;等价于[a-lq-z](减去)
2.预定义字符类
. (点):代表任意字符,几个点代表几个任意字符。 例:“ab”.matches("..");true
注:在Java中若 "0".matches("\d"),此时表达式会标红报错,因为在Java中\代表转义字符,所以想要表达"\d"则需要写成"\\d",其它以\开头的正则表达式同此规则。
\d 数字:等价于[0-9]; 例: "0".matches("\\d");true
\D 非数字:等价于[^0-9]; 例:"%".matches("\\D");true
\s 空白字符:等价于[ \t\n\x0b\f\r]; 例:" ".matches("\\s");true。注意,一个Tab键等于四个空格,判断一个Tab键的时候返回true,但是手动输入四个空格时虽然和Tab键长度一样,但是返回false,因为[ ]只能表示一个字符。
\S 非空白字符:等价于[^\s]; 例:“a”.matches("\\S");true
\w 单词字符:等价于[a-zA-Z_0-9]; 例:"_".matches("\\w");true。 "%".matches("\\w");false。 注意:除了字符数字外,下划线 也属于单词字符。
\W 非单词字符:等价于[^\w]; 例: "%".matches("\\W");true。 "_".matches("\\W");false。
3.数量词
X? 表示X所包含的字符出现一次或者一次也没有出现则返回true,出现别的则都返回false。
例:"a".matches("[abc]?");true "ab".matches("[abc]?");false "".matches("[abc]?");true " ".matches("[abc]?");false
X* 表示X所包含的字符出现0次到多次则返回true,如若出现不包含的字符则返回false。
例:"abab".matches("[abc]*");true | "aaaa".matches("[abc]*");true | "af".matches("[abc]*");false | "".matches("[abc]*");true
X+ 表示X所包含的字符出现1次到多次则返回true,其它情况则false。 //此表达式和上个类似,只是除去了0次为空的情况。
X{n} 表示X所包含的字符恰好出现n次则返回true,超过或者少于或者别的情况则都是false。
例:"ababa".matches("[abc]{5}");true | "aaaa".matches("[abc]{5}");false | "bbbbb".matches("[abc]{5}");true | "abcabc".matches("[abc]{5}")false
X{n,} 表示X所包含的字符至少出现n次。
例:"ababa".matches("[abc]{5,}");true | "aaaaaa".matches("[abc]{5,}");false
X{n,m} 表示X所包含的字符至少出现n次,但不超过m次,即也包括n和m次。
例:"ababa".matches("[abc]{5,9}");true | "ababacccc".matches("[abc]{5,9}");true | "aaaaaabbbb".matches("[abc]{5,9}");false
4.正则表达式的应用
①要求:将字符串中的所有数字去掉。
输出结果:
②要求:将字符串的“.”和重复叠字都去掉。
输出结果:
分析:第一个正则,"\\."是表示“.”,"\\.+"表示至少一个或多个的“.”,然后替换成""。
第二个正则,"(.)"表示一个组,包含任意一个字符,"\\1"则表示必须与第一个括号内的内容一致,“+”表示出现一次或者多 次。
③Pattern和Matcher的结合使用
输出结果: