正则表达式

今天对java基础部分进行了复习,同时对于关于正则表达式部分进行了总结。

 

一、正则表达式的基本用法

 

    正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)

  作用: 专门用于字符串的操作。
  特点: 用一些特定的符号来表达一些代码操作,以简化书写。(学习对特殊符号的使用)
  好处: 可以简化对字符串的复杂操作。
  弊端: 符号定义越多,正则越长,阅读性越差。

  具体操作功能:

    匹配: String中的 metches 方法, 用规则匹配整个字符串,只要有一处符号不匹配就会停止校验,返回false。

    切割: String中的 split方法,使用规则查找整个字符串,找到匹配该规则的子串,并从此处切割。

    替换: String中的 replaceAll,使用规则查找整个字符串,将符合规则的部分替换成指定字符串。

    获取: 将字符串中符合规范的字符串取出:

      步骤:

        1、将正则表达式封装成对象。
          如: Pattern p = Pattern.compile(regex);
        2、让正则对象和要操作的字符串进行关联。
            matcher(Charsequence input)
        3、关联之后获取正则引擎。(与上步同时操作)
          如: Matcher m = p.matcher(str);
        4、通过引擎对符合规则的子字符串进行操作,如: 取出。
          正则引擎中有许多操作方法:

          匹配: boolean matches() 尝试将整个区域与模式匹配。

          替换: String replaceAll(String replacement) 替换模式与给定替换字符串相匹配的输入序列的每个子序列。

          查找: boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列。
              boolean find(int start) 重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。

          返回: String group() 返回由以前匹配操作所匹配的输入子序列。
                String group(int group) 返回在以前匹配操作期间由给定组捕获的输入子序列。

              int start() 返回以前匹配的初始索引。
              int start(int group) 返回在以前的匹配操作期间,由给定组所捕获的子序列的初始索引。

              int end() 返回最后匹配字符之后的偏移量。
              int end(int group) 返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。
    
        思考方式:
            只想要判断字符串的对错, 就要使用匹配。
            只想要将已有的字符串改变成另一个字符串,使用替换。
            只想要按照一定的方法将已有字符串变成几个字符串,使用切割。(获取规则之外的子串)
            只想要获得符合规则的字符串的子串,使用获取。(获取规则之内的子串)

        邮箱校验:"[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\\.[a-zA-Z]+){1,3}"

 

二、正则表达式的常用规则

 

    字符
      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]

    边界匹配器:
      ^        行的开头
      $        行的结尾
      \b       单词边界
      \B       非单词边界
      \A       输入的开头
      \G      上一个匹配的结尾
      \Z       输入的结尾,仅用于最后的结束符(如果有的话)
      \z       输入的结尾

    Greedy 数量词(还有其他的类型数量词)
      X? X,      一次或一次也没有
      X* X,      零次或多次
      X+ X,      一次或多次
      X{n} X,      恰好 n 次
      X{n,} X,      至少 n 次
      X{n,m} X,    至少 n 次,但是不超过 m 次

    组和捕获

      捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
      (组数从最左边的左括号开始定义)
      1 ((A)(B(C)))
      2 \A
      3 (B(C))
      4 (C)
        组零始终代表整个表达式。(使用时用 \\数字 代表再次使用的哪一组)
        在其他字符串中获取前面正则表达式的 组: 使用 $ 加组数。

      注意: 定义正则表达式是以字符串的形式(双引号内)定义的,所以, 要注意 \ 和转义字符的冲突性。
          如在使用一些预定义字符 和 使用捕获组的使用, 本身就有反斜杠, 所以要在加一个反斜杠来 转义本来的反斜杠。

posted @ 2017-04-28 23:17  阿肯新  阅读(171)  评论(0编辑  收藏  举报