正则表达式
正则表达式:描述字符串的规则,操作字符串。
预定义字符
. 表示任意字符
\d 数字 [0-9]
\D 非数字 [^0-9]
\s 空白字符 [\t\n\f\r]
\S 非空白字符
\w 单词字符 [a-zA-Z_0-9]
\W 非单词字符
注意:没有加上数量词之前,预定义字符只能匹配一个字符
范围词
[abc] 出现的字符只能是abc其中的一个
[^abc] 任意字符,除了abc
[A-Za-z] a到z 或者A到z ,两边的值包含在内。 (并集)
[a-z&&[def]] d、e或f (交集)
(com|cn|net) com 或者cn 或者 net
注意:没有加上数量词之前,范围词只能匹配一个字符
数量词
X ? 出现0次或者一次
X * 出现0次或者多次
X + 出现一次或者多次
X{n} 出现n次
X{n ,} 出现n次以上(包含n次)
X{n,m} 出现n次以上,m次以下
边界匹配器
\b 只是表示单词的开始或结束部分,不匹配任何字符 . 单词边界
从字符串中找出三个字符的数据。
由于没有使用边界匹配器。所以对于匹配器而言,只要从左到右连续找到三个字符即可。不符合题意。如下图
//查找 找出三个字母组成的单次
public static void search() {
String str="asas sd asa dfdff sdsd sds地方";
//先把正则表达式编译成正则对象
Pattern p=Pattern.compile("[a-zA-Z]{3}");
//通过正则对象产生匹配器
Matcher matcher = p.matcher(str);
while(matcher.find()) {
String group = matcher.group();
System.out.println(group);
}
}
控制台打印 :
asa
asa
dfd
sds
sds
如果要想找到连续三个字符,则要使用边界词,如下图
//查找 找出三个字母组成的单次
public static void search() {
String str="asas sd asa dfdff sdsd sds地方";
//先把正则表达式编译成正则对象
Pattern p=Pattern.compile("\\b[a-zA-Z]{3}\\b");
//通过正则对象产生匹配器
Matcher matcher = p.matcher(str);
while(matcher.find()) {
String group = matcher.group();
System.out.println(group);
}
}
控制台打印 :
asa
分组
如果正则的内容需要被复用,那么就需要对正则的内容进行分组,分组的目的是提高正则的复用性。组号从1开始。
分组(...)
js中引用分组 (...)(...)\1\2
java中引用分组
String s=" <span font-weight: bold; mso-spacerun: ?yes??? 仿宋_gb2312?; >\r\n" +
" <font facx=\"x\" sizx=\"x\">中华人民共和国中国人民银行法</font>\r\n" +
" </span>";
s=s.replaceAll("<([^/|>| ]+) ([^\"|>|/]+)>", "<$1 style=\"$2\">");
正则表达式对字符串的操作有以下应用:
匹配
str.match(regex)
切割
str.split(regex)
替换
str.replace(regex,str)
注意:如果需要在replaceAll方法中,外部引用正则的组的内容,使用 $组号 即可
查找
查找需要使用的对象:
Pattern类 正则对象
Matcher 匹配器对象
匹配器使用的方法:
find() 通知匹配器查找符合规则的字符串,如果找到返回true,否则为false
group()
//查找 找出三个字母组成的单次
public static void search() {
String str="asas sd asa dfdff sdsd sds";
//先把正则表达式编译成正则对象
Pattern p=Pattern.compile("[a-zA-Z]{3}");
//通过正则对象产生匹配器
Matcher matcher = p.matcher(str);
while(matcher.find()) {
String group = matcher.group();
System.out.println(group);
}
}
其他
匹配 . \\.
代码模拟
二、str.replace()
1、String字符串的replaceAll()/replace()方法支持正则表达式。
2、正则表达式()表示或
tableStr=tableStr.replaceAll("(<WAITING TIME <=)|(<WAITING TIME)|(<=\\d+ WAITING TIME)","");
等同于
tableStr=tableStr.replaceAll("<WAITING TIME","").replaceAll("<WAITING TIME <=","").replaceAll("(<=\\d+ WAITING TIME","");