码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2015-05-14 23:25:16      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

/*正则表达式:符合一定规则的表达式
*
*    作用:专门用于对字符串进行操作
*    特点:用一些特定符号来表示一些代码操作,这样就简化了书写。
*    所以学习正则表达式,就是在学习一些特殊符号的使用
*    好处:可以简化对字符串的复杂操作
*
* 常见操作:
*
*    匹配:判断一个给定的字符串是不是符合某一规则的字符串,即该字符串是否是符合给定的正则表达式所指定的规则的字符串
*        String matches() 用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false
*
*   替换:将一个字符串中的符合规则的部分替换为指定的字符串,符合规则是指符合给定的正则表达式所指定的规则
*
*         String split() 切割,碰到不匹配的继续检索剩下的,而不是立即返回,继续处理剩余的部分
*
*      引出捕获组的概念,捕获组使用()定义的,使用Back引用\n(n 是捕获组的编号)来引用的。每个捕获组都有编号,编号从1开始,编号0的组是代表整个表达式
*      组的使用,可以使得与组中规则匹配的子序列可以通过Back引用被重复使用,即组使得正则匹配的结果可以被重复使用。【注意:Back引用是对组的结果的引用】
*      任何一个正则表达式都可以被封装成组,当有复杂的组定义时,如((())()()),组的个数为左括号的个数,组的编号为组的左括号是第几个左括号,那么组的编号就是 几。
*
*      例如:([0-9]{2})\1 -> "([0-9]{2})\\1"; //第一位和第二位是两个0-9的数字,第三位和第一位相同,第四位和第二位相同,例,1212 匹配
*
*
*        【 X? X,一次或一次也没有
         X* X,零次或多次
         X+ X,一次或多次
         X{n} X,恰好 n 次 】中X代表一个正则表达式
*
*    切割:将一个字符串按照某一规则进行切割,这一规则是由正则表达式指定的,即先查找字符串中符合规则的部分,然后去掉符合规则的部分,将剩下的多个字符串返回
*       String replaceAll("正则表达式","要替换成的字符串")
*       替换中的特殊部分,引入$符号,$符号可以在正则表达式的外面引用正则表达式中的组,即在 "要替换成的字符串" 中引用 "正则表达式" 中组的结果
*
*    例如:
*      String str ="abbbbbcdfeeeefxoyyy;lkaaaax";
*      str = str.replaceAll("(.)\\d+","$1") ; 将字符串str中的叠词(连续出现两次或者两次以上)替换成为一个词(即只出现一次)
*      System.out.println(str); //替换后的结果为 "abcdfefxoy;lkax"
*
*
*    获取:将一个字符串中符合规则的部分(子串)获取到,这一规则是由正则表达式指定的,即查找符合规则的字符串,并将它们返回。
*
*      1. 将正则表达式封装成正则对象 Pattern p = Pattern.compile(regex);
*      2. 将正则对象与要操作的字符串相关联,关联后获取正则匹配引擎 Matcher matcher = p.matcher(str);
*      3. 通过引擎对符合规则的子串进行操作,比如取出 matcher.find(); String subStr = matcher.group();
*
*
*      String.matches() 方法用 Pattern Matcher对象来完成的,用的是Matcher.matches()
*
*
*
    1、 我们知道在字符串中为了表示某些特殊的字符需要用转移字符来表是,比如\t \b \r \n \f \" \‘ \\
    为什么呢?
    一个原因是这些字符用已有的字符表示不出来,比如\t(制表符),\b(空格符),\n(换行符);
    再一个就是这些字符很特殊,比如"(双引号)本身又是字符串的边界限定符,‘(单引号)又是字符的限定符,
    所以需要用一个\(反斜杠)字符来表示将其后面的字符转义。这样\(反斜杠)被用做转移字符,无法表示\字符本身所以就用\\来表示\(反斜杠)本身了

    2、 而正则表达式本身是一个表达式,一个特殊符号的表达式,这个表达式将被正则引擎解释为相应的代码操作,所以每个正则符号都有其特定的含义
    另一方面,正则表达式本身又是被封装到字符串中,用字符串的形式表示出来,所以其相当于又被包装了一层,所以其要先符合正则规则,然后封装到字符串中
    再符合字符串的规则。
    例如: 正则表达式    封装到字符串中的正则表达式
        \d    ->  "\\d"
        \.     ->    "\\."
        \    ->    "\\"

    3、当使用一个正则表达式对一个字符串进行匹配的时候,会将正则表达式的字符串解释成规则,而将被操作(匹配、替换等)的字符串当做一个字符序列来操作,当做
    一个个按顺序排列的字符操作,这个字符序列中不分转义字符或是边界字符还是特殊符号,全部都是一个个字符序列。
    【这一点和系统对于字符串的解析不同,系统对于字符串的解析是按照约定解析的。】
*
*1、对QQ进行校验
*
*要求: 5~15 0 不能开头,只能是数字
*
* String regex = "[1-9][0-0]{4,14}";
*
*2、匹配手机号
*
*要求:手机号段只有 13xxxx 15xxx 18xxxx
*
* String regex = "1[358]\\d{9}";
*
*/

正则表达式

标签:

原文地址:http://www.cnblogs.com/wllbelief-win/p/4504698.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!