黑马程序员——java正则表达式

 

------<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}");

优点:通过一些符号的形式,简化了代码的书写。其实底层对应还是代码。

弊端:符号太多,阅读性越差。  

所以学习正则,就要先学习一些符号。  字符串有了正则之后,会变得非常简单

正则对字符串的常见功能操作:

匹配,切割,替换,获取。

黑马程序员——java正则表达式_第1张图片

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都可以

黑马程序员——java正则表达式_第2张图片

 

 

预定义不需要制定,这种特殊符号本身就代表很多东西,双反斜线代表反斜线。

说明:空格是空白字符的一种,除此外有制表符,换行符,回车键等

黑马程序员——java正则表达式_第3张图片

黑马程序员——java正则表达式_第4张图片

    匹配

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

黑马程序员——java正则表达式_第5张图片

凡是用到和正则表达式相关的方法,必须用正则对象。因为字符串正则需要被解析

 

    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()));
        }
    }

你可能感兴趣的:(黑马程序员——java正则表达式)