------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训
</a>、期待与您交流! -------
正则表达式:专门用于操作字符串的技术。
而且可以用简化代码,用于对字符串进行复杂操作。
校验QQ号比较麻烦,简单一些的,字符串中提供一个方法,需要一种技术才能实现
qq.matches()
体现规则的出现和之前用代码做校验的区别?
规则中是每位判断的。第一位是能取的值,第二位同样是能取得值,4-14次
boolean b = qq.matches("[1-9][0-9]{4,14}");
优点:通过一些符号的形式,简化了代码的书写。其实底层对应还是代码。
弊端:符号太多,阅读性越差。
所以学习正则,就要先学习一些符号。 字符串有了正则之后,会变得非常简单
正则对字符串的常见功能操作:
匹配,切割,替换,获取。
boolean b = qq.matches("[1-9][0-9]{4,14}"); boolean b = qq.matches("[abc][1-9][0-9]{4,14}");开头的取值范围是abc boolean b = qq.matches("[^abc][1-9][0-9]{4,14}");开头的取值范围除了abc都可以
预定义不需要制定,这种特殊符号本身就代表很多东西,双反斜线代表反斜线。
说明:空格是空白字符的一种,除此外有制表符,换行符,回车键等
匹配
public class Test7 { public static void main(String[] args) { // TODO Auto-generated method stub String number=""; String number_regex="1[358]\\d{4}(4)\\1{4}";//\1 就代表第一个小括号的内容 {4}重复4次 这样加起来就是5个相同的数字 System.out.println(number+":"+number.matches(number_regex)); } } 切割 private static void incise() { // TODO Auto-generated method stub String str="zhangsan...wangwu.lisi"; String regex="\\.+"; String[] strs=str.split(regex); for (String s : strs) { System.out.println("-"+s+"-"); } } 切割叠词 private static void incise() { // TODO Auto-generated method stub String str="zhangsan#########wangwu!!!!!!!lisi"; // 寻找与正则表达式相关的方法 String regex=".+"; String[] strs=str.split(regex); for (String s : strs) { System.out.println("-"+s+"-"); } } 替换 replaceAll() private static void replace() { // TODO Auto-generated method stub String str="zhangsan######liosi#######wangwu"; str=str.replaceAll("######", "&"); System.out.println(str); } 叠词分组 str=str.replaceAll("(.)\\1+", "&"); 如果多个@换成一个@,多个#换成一个#: str=str.replaceAll("(.)\\1+", "$1"); 论坛常用替换:
叠词分组
str=str.replaceAll("(.)\\1+", "&");
如果多个@换成一个@,多个#换成一个#:
在参数列表中,其他参数要使用之前参数中规则的组,需要使用$组编号
str=str.replaceAll("(.)\\1+", "$1");
论坛常用替换:
3,替换:
用的是replaceAll(regex,string);
这些String类的方法在方法文档说明中都提到了Pattern,这些方法的内部使用的都是Pattern完成。
Pattern是什么呢?Pattern就是正则表达式的编译表现形式,每一个正则表达式在编译后都是一个Pattern对象。
//1,将正则表达式的字符串格式先通过Pattern中的compile方法编译成Pattern正则表达式对象。
//原来Pattern的作用是将正则字符串封装成正则对象。
Pattern p = Pattern.compile("a*b");
//2,要想用这个规则对字符串进行操作,还需要通过正则对象matcher方法和指定的字符串关联,并获取匹配器对象Matcher。
//真正将规则作用到字符串上的对象是匹配器Matcher.
Matcher m = p.matcher("aaaaab");
//3,用匹配器对象Matcher的功能(方法)对字符串进行操作了。
//matches()匹配整个 lookingAt():每次从头开始 find():可以匹配下一个
获取
里面用到的是正则对象,正则本身是个类
Pattern
凡是用到和正则表达式相关的方法,必须用正则对象。因为字符串正则需要被解析
4,获取。
其他三个功能内部最终使用的都是Pattern正则表达式对象。
现在需要其他功能时,字符串String类中没有对应的方法,只能找Pattern对象。
Pattern对象的使用的原理:
1.将正则表达式字符串编译成正则对象pattern.
2.通过pattern对象获取Matcher对象(匹配器对象).
3.通过匹配器对象对字符串进行规则的匹配,结果都在匹配器中。
4.通过匹配器对象的功能获取结果。 范例代码:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab"); boolean b = m.matches();
Matcher:匹配方法三个:matches(); lookingAt: find();
通过find找到匹配规则的字符串后,可以通过start() end()获取子串对应的索引,也可以通过group()直接获取子串。
// 1 获取正则表达式对象 Pattern p = Pattern.compile(str); // 2 和要操作的字符串关联,获取对应的匹配器对象 Matcher m = p.matcher(str); System.out.println(str); while (m.find()) { System.out.println(m.start()+"..."+m.group()+"..."+m.end()); System.out.println(str.substring(m.start(), m.end())); } }