Java总结-正则表达式

13年前
正则表达式:
    专门用于操作字符串的规则。
    将一些操作代码通过一些符号体现。
    好处:
        1,方便了程序的编写。
        2,可以用于对字符串的复杂操作。
    弊端:
        阅读性较差。


常用规则:
[]:限定某一位字符内容范围。
比如:    [abc]:该位字符只能出现a或者b或者c。
    [a-z]:改为字符只要是小写字母中的一个即可。
{}:限定前一个字符或者正则规则内容出现的次数。
比如:    {3}:出现3次。
    {3,}:至少出现3次。
    {3,7}:出现3到7次。

数量规则:
    ?:出现一次或者0次。
    * :出现了0次或者多次。
    + :出现1次或者多次。

字符规则:
    \d: [0-9],数字。
    \D: [^0-9],非数字。
    \w: [a-zA-Z0-9_]
    \b: 单词边界。
    \s: 空格,tab,\r  \n.

组规则:
    可以将正则表达式的结果通过()进行封装,以便于该规则内容被重用
    技巧:当出现了嵌套组的时候,通过左括号来进行编号的判断。该编号从1开始。

    如果使用已定好的组呢?
    通过\n形式,反向引用组。()\\1+。

特殊:
    $ : 代表是行结束。
    ^ : 行开始。
    . : 代表任意字符。


--------
对字符串操作的常见功能。
1,匹配。String matches(regex);其实最终使用的是Matcher匹配器对象。
    需求:判断QQ号码。5~15 0不可以开头。
    qq.matches("[1-9]\\d{4,14}");

2,切割:String split(regex);
    需求:如果想通过  .  的形式起个字符串。
    split("\\.");

3,替换:String replaceAll(regex,str);
    在regex表达式中使用了组。那么可以在str中的通过  $编号 的形式获取regex中的组。
    需求:如果想将符合规则的内容替换成一个$符号。
    replaceAll(regex,"\\$");
    需求:替换叠词,用叠词中的一个替换全部。
    s.replaceAll("(.)\\1+","$1");

4,查找:涉及到java.util.regex包中两个对象。Pattern ,Matcher。
    1,将正则规则封装成Pattern对象。Pattern p = Pattern.compile(regex);
    2,将规则对象和要作用的字符串相关联,获取匹配器对象。Matcher m  = p.matcher(str);
    3,通过匹配器对象find()将规则去操作字符串,如果找到返回true。
       在通过group()方法获取找到符合规则的内容。


练习:
    1,获取一段英文有三个字母组成的单词。
    2,操作一组ip地址,按ip地址顺序排序。
    3,Email规则。/*[a-zA-Z0-9_]*/  "\\w{6,12}@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+"
    4,网页爬虫。           
        遍历网页中的文本,将符合规则的信息获取。

应用场景:
注册表单的校验。