正则表达式

什么是正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

注意事项

  1. []表示匹配的字符范围,也就是需要匹配的字符都在里面,例如[a-z]表示a-z之间的任意字母都可以{}表示匹配的字符数,也就是要匹配几个字符,例如:[abcdefg]{3}表示在adcdefg这所有的字符里面的三个拿出来匹配,"ac.matchers("[abcdefg]{3}")"返回的是false,因为2个和三个无法匹配!
  2. 范围的扩大。我们知道[]表示的是匹配的范围,也就是需要的字符得放在[]里面,我们可以对一些[]进行扩充,[[a-z][A-Z]]就表示由两个字符范围组合成的一个更大的字符fanwei[a-zA-Z];这个在邮箱的正则表达式里面会用到。
  3. a,a?,a+分别表示字符a存在的数量,表示0或者多个,?表示一个或者没有,+表示一个或者多个。
  4. 反斜杠的存在;由于一些特殊的字符,我们需要使用反斜杠进行表示,例如,我们需要一个反斜杠,那么写法就是”\“,我们需要一个dot,那么就是”\.”,”\w”表示的是[a-zA-Z0-9]也就是所有的数字和字母的组合。就是注意由于双引号的存在,我们的表达式的写法要注意。
  5. 对我们的正则表达式进行编译:Pattern pattern=Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");这样可以提到我们的效率。同时,使用我们的类进行匹配,可以进行更多的数据操作,而不仅仅是返回时候匹配这个最简单的问题。Matcher matcher=pattern.matcher(checkmainString);这句话是对需要进行匹配的字符串checkmainString进行匹配。匹配的结果放到我们的matcher对象里。matcher对象可以进行很多的操作。使用find()函数可以得到匹配的数据的下一个光标,相当于我们的hasNext(),使用group()函数可以得到find里的数据,相当于我们的next()函数得到数据内容。使用matcher对象我们可以完成更多的操作。
  6. 网页数据爬取,其实就是使用正则表达式爬取我们需要的数据的一个过程,一般的爬虫是使用python写的。
  7. 一个简单的邮箱爬取程序如下:

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class RegExpression {
    public static void main(String[] args) {

    // TODO Auto-generated method stub
    String checkmainString="ansdnasdjna"
            + " 39177@qq.com  askcscn  1e233223 "
            + "qweqweqwiwn dkaks ^%$#^* )(&&&T "
            + "&%^DGusnoc*H 7878@163.com  asican"
            + "67681w8ac giam@gmain.cn casdnasohsa"
            + "hdajsdneind jinfu@scnu.edu";
    Pattern pattern=Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
    Matcher matcher=pattern.matcher(checkmainString);
    while(matcher.find()){//找到匹配的字符串,经数据放到group里面!
        System.out.println(matcher.group());
    }
    //注意:[\\w[.-]]表示的是一个大的数组,它是[\w . -],就是由\w加上.-组成的新的组合范围!
    

    }

}