内容:正则表达式是什么?为什么会有正则表达式?正则表达式常用功能
#####################正则表达式是什么?
正则表达式是用于匹配想要的规则的字符串,如:
var str = "abc123def"; var patt1 = /[0-9]+/; document.write(str.match(patt1));
patt1 就是一个 正则表达式,这里是匹配数字,要匹配其他,当然要学规则
#####################为什么会有正则表达式?
有匹配字符串的需求,比如上面例子,如果数字更长,我们又要取出,用代码编写就会比较复杂,如果使用正则,每次都是使用这个方法,熟悉后,编写迅速,太多就不写了,啰嗦
###############################################################################常用功能
###############规则
java 中要重复出现
###################Java正则常用功能
//####切割
private static void splitDemo() { String temp = "awelafew##aewwoeif$$$$fewaigaxxxxoaigjwkqqqqqq"; String regex = "(.)\1+"; //重复数量大于1 String[] names = temp.split(regex); for(String name:names){ System.out.println(name); } }
与正则匹配的字符为:
##
ww
$$$$
xxxx
qqqqqq
调用结果:输出
awelafew
ae
oeif
fewaiga
oaigjwk
这里通过下面这个例子理解重复问题。
([0-9])1{5} 或 ([d])1{5} 连续相同的6位数字 如:333333
([0-9a-zA-Z])1{5} 连续相同的6位数字或字母 如:222222 cccccc ZZZZZZ
([d])1{2}([a-z])2{2} 连续相同3位数字后根连续相同的三位小写字母 如:222www
([d])1{2}([a-z])2{2}|([a-z])3{2}([d])4{2} 同上,但是能匹配数字+字母或字母+数字 如:222www 或 www222
这么多的例子自己可以扩展,要注意的就是 1 2代表位置,从左到右递增
所以上面的正则是可以改成(.)\1{1,}
//####替换
{ String num = "15722226666"; num = num.replaceAll("(\d{3})\d{4}(\d{4})", "$1****$2"); //在方法多参数时,后面的参数可以通过 $编号 的形式取到前一个参数的组 System.out.println(num); }
调用结果:输出
157****6666
//####获取
实现获取:将符合规则的内容提取出来
用正则表达式对象。java.util.regex.Pattern
1.将字符串规则封装成Pattern对象。Pattern.compile(regex)
2.通过正则对象获取匹配器对象。用对将正则规则作用到要操作的字符串上
3.通过匹配器对象的方法,对字符串进行操作
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
Matcher类
• matches 方法尝试将整个输入序列与该模式匹配。
• lookingAt 尝试将输入序列从头开始与该模式匹配。
• find 方法扫描输入序列以查找与该模式匹配的下一个子序列。
String
group() 返回由以前匹配操作所匹配的输入子序列。
单词边界:\b
步骤:
1、获取Pattern类
2、Pattern类和Matcher关联
3、匹配
4、获取
private static void getDemo() { String source = "aix awefawe wega aiq wea fwa gal aweflia"; String regex = "\b[a-zA-Z]{3}"; // 开头以字母开始,选取前面三个 Pattern p = Pattern.compile(regex); Matcher m = p.matcher(source); while(m.find()){ System.out.println(m.group()); } }