您的位置:首页 > 职场人生

黑马程序员 JAVA学习笔记 —— 正则表达式

2014-05-16 15:27 399 查看
android培训java培训、期待与您交流! 

正则表达式:既是一种规则的表达式
作用:用于操作字符串 将用对字符串操作的代码用一些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。
学习正则表达式就是在学习 特殊符号的使用。
好处:可以简化代码的书写
坏处:阅读性比较差


正则表达式的构造摘

摘自 API1.6
构造匹配
 
字符
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]


具体操作功能:
1.匹配:String matches方法 用于规则匹配整个字符串 只要有一处 不符就匹配结束返回false

例:

public static void main(String[] args)  {
        // TODO Auto-generated method stub
        String nub = "19";//测试用字符
        String rul = "[1][9]";//正则规则
        String rul1 = "[1][7]";//第二条正则规则
        boolean b = nub.matches(rul);
        boolean b1 = nub.matches(rul1);
        System.out.println(b+"  "+b1);//一对一错进行比对
        
    }

 注:一个[ ]对应字符串中的一位。



有第一个[1]与字符串中第一位1对应所以继续匹配[9]与9匹配所以b返回true b1返回false

2.分割:String split方法 用于规则分割字符串 
 

public static void main(String[] args)  {
        // TODO Auto-generated method stub
    String s0="Gandam    Gandam_Z      Gandam_ZZ";//测试用字符串1 切多个空格
    String s1="nihao,woshi,lihaiyun";//测试2 切逗号
    String s2="bbs.itheima.com";//测试3 切特殊符号.
    String s3="E:\\黑马程序员\\视频";//测试4 切双反斜杠
    String s4="qwerwwkfxxpoffaq";//测试5 切双字符
    String rul0=" +";
    String rul1=",";
    String rul2="\\.";
    String rul3="\\\\";
    String rul4="(.)\\1";
    String[] arr=s0.split(rul0);
    show(arr);
    arr=s1.split(rul1);
    show(arr);  
    arr=s2.split(rul2);
    show(arr);  
    arr=s3.split(rul3);
    show(arr);  
    arr=s4.split(rul4);
    show(arr);  
    }

    static void show(String[] x)
    { for(String test:x)
    {System.out.println(test);}}
}

 










注: +表示一次或多次出现 我前面打了空格 代表  空格一次或多次出现  

//.第一个/表示在字符串中的转义第二个表示正则表达式的转义

()表示组 .表示任意字符 /1表示引用第一个组
Greedy 数量词
X?X,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好 n 次
X{n,}X,至少 n 次
X{n,m}X,至少 n 次,但是不超过 m 次
引用
\Nothing,但是引用以下字符
\QNothing,但是引用所有字符,直到 \E
\ENothing,但是结束从 \Q 开始的引用
 3.替换 String replaceAll方法 用于规则替换字符串

 

public static void main(String[] args)  {
        // TODO Auto-generated method stub
    String s0="a1d3qw45646q4d56q1wd53s1a5wdq313";
    s0=s0.replaceAll("\\d+","a");//将所有数字替换成a
    System.out.println(s0);
}

 如果只是把数字替换掉可以去掉加号
 


 

String s0="a1d3qw45646q4d56q1wd53s1a5wdq313";
    s0=s0.replaceAll("\\d+","a");//将所有数字替换成a
    System.out.println(s0);
    s0=s0.replaceAll("(.)\\1","$1");//精叠词替换成一个
    System.out.println(s0);

 $表示在正则表达式外获取组


 
4.获取:将字符串中的符合规则的字符串取出。
操作步骤:
1.将正则表达式封装成对象

2.让正则对象和要操作的字符串相关联

3.关联后,获取正则匹配引擎

4.通过引擎对符合规则的字符串进行操作 

 

public class maches {

    /**
     * @param args
     * @throws ClassNotFoundException 
     */
    public static void main(String[] args)  {
        // TODO Auto-generated method stub
    String s="ming tian yao qu hei ma la";
    String rul="\\b[a-z]{3}\\b";
    Pattern p=Pattern.compile(rul);//将规则封装成对象
    Matcher m=p.matcher(s);//让正则对象和要操作的字符串相关联
    //其实String类中的matches方法,用的就是pattern和matcher对象来完成的。  
    //只不过是被封装了。用起来较为简单。
    while(m.find())
    {System.out.println(m.group()+" "+m.start()+"..."+m.end());}
    }

 注:/b表示单词边界。find表示将规则作用到字符串上,并进行符合规则的字串查找。 group表示得到第一个符合规则正则的字串。并返回。start end表示得到符合规则正则的字串的起始下标
和结束下标

正确使用正则表达式的方法

1.如果只想知道该字符是否对错 使用匹配

2.想要将已有的字符串变成另一个字符串 替换

3.想要按照自定义的方式将字符串变成多个字符串 用切割 获取规则以外的字符串

4.想要拿到符合要求的字符串 用获取 获取符合规则的字符串

总而言之正则表达式 作为字符串操作工具十分的便捷 就是时间格的久了 再看会比较麻烦 学起记得符合很多 但熟练以后会发现比起String里的方法好用多了 特便是简化代码方面。

android培训java培训、期待与您交流!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: