正则表达式:符合一定规律的表达式
作用:专门用于操作字符串
特点:用一些特定的符号表示一些代码的操作。这样简化书写
好处:可以简化对字符串的复杂操作
弊端:符号定义越多,符号越长,阅读性越差
具体操作功能:
1:匹配(String的matches(regex)方法),用规则匹配整个字符串,只要有一处不符合就结束,并返回false
2:切割(String的split()方法)
3:替换(String的replaceAll())
4:获得 将祖父传中符合规则的字串取出。步骤①将正则表达式封装成对象②让正则对象和要操作的字符串进行相关联③关联后,获取正则匹配引擎④通过引擎将符合规则的字符串进行取出操作
匹配例子
简单验证qq号码(要求是长度为5—15位的数字)
public static void main(String args[]){
String qq = "18735621s3";
String regex = "[1-9]\\d{4,14}";
boolean b = qq.matches(regex);
if(!b){
System.out.println("格式正确");
}
else
System.out.println("格式错误");
}
切割例子
public static void splitDemo(){
String str = "zhangsan lisi wangwu";
String regex = " +";//多个空格
String[] arr = str.split(regex);
for(String s:arr){
System.out.println(s);
}
}
注意切割的时候如果是正则表达式里的特殊符号,就要注意了比如“点”
String str = "zhangsan.lisi.wangwu";
String regex = "\\.";
String str = "c:\\java\\a.text";
String regex = "\\\\";
String str = "shiadiyiaadasofaccasdkhuu";//按照叠词进行切割aa cc uu
String regex = "(.)\\1";//这里使用正则表达式里的组() 点表示任意字符 java回个组自动编号好\\1表示第一组相当于重用
替换例子
public static void replaceAllDemo(){
String str = "we19911115qq997911111dianhua1527121111";
String regex = "\\d{5,}";//多个空格
String newstr = "#";
str = str.replaceAll(regex, newstr);
System.out.println(str);
}
public static void replaceAllDemo(){
String str = "wesdssssdaofueeeassdasduqqq";//将zzzzz——》z
String regex = "(.)\\1+";//多个空格
String newstr = "$1";//$1获取前边规则中的第一组
str = str.replaceAll(regex,newstr);
System.out.println(str);
}
获取例子
public static void getDemo(){
String str = "ming tian jiu yao fang jia le,tong zhi men ";
String regex = "\\b[a-z]{3}\\b";
//讲规则封装成对象
Pattern p = Pattern.compile(regex);
//让正则对象和要做用的字符串相关联,获取匹配器对象
Matcher m = p.matcher(str);
while(m.find()){//讲规则作用到字符串上,并进行符合规则的字串查找
System.out.println(m.group());//获取别配后的结果
System.out.println(m.start()+"·····"+m.end());
}
}
字符 | |
---|---|
x | 字符 x |
\\ | 反斜线字符 |
\0n | 带有八进制值 0 的字符 n (0 <= n <= 7) |
\0nn | 带有八进制值 0 的字符 nn (0 <= n <= 7) |
\0mnn | 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7) |
\xhh | 带有十六进制值 0x 的字符 hh |
\uhhhh | 带有十六进制值 0x 的字符 hhhh |
\t | 制表符 ('\u0009') |
\n | 新行(换行)符 ('\u000A') |
\r | 回车符 ('\u000D') |
\f | 换页符 ('\u000C') |
\a | 报警 (bell) 符 ('\u0007') |
\e | 转义符 ('\u001B') |
\cx | 对应于 x 的控制符 |
字符类 | |
[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](减去) |
预定义字符类 | |
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
边界匹配器 | |
---|---|
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词边界 |
\B | 非单词边界 |
\A | 输入的开头 |
\G | 上一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
\z | 输入的结尾 |
Greedy 数量词 | |
---|---|
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
Reluctant 数量词 | |
X?? | X,一次或一次也没有 |
X*? | X,零次或多次 |
X+? | X,一次或多次 |
X{n}? | X,恰好 n 次 |
X{n,}? | X,至少 n 次 |
X{n,m}? | X,至少 n 次,但是不超过 m 次 |