黑马程序员 ---> 正则表达式
--------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ---------------
一、概述:
1、概念:符合一定规则的表达式。
2、作用:用于专门操作字符串。
3、特点:用于一些特定的符号来表示一些代码操作,这样就可以简化代码书写。
4、好处:可简化对字符串的基本操作。
5、弊端:符号定义越多,正则越长,阅读性越差。
二、常用符号:
1、字符
构造 匹配
\\ 反斜线字符
\t 制表符
\n 回车符
\f 换页符
2、字符类
[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](并集)
3、预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字: [0-9]
\D 非数字: |^[0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^ \t\n\x0B\f\r]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
4、边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
5、Greedy数词量---->匹配整个字符串
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好n次
X{n,} X,至少n次
X{n,m} X,至少n次,但不超过m次
6、组和捕获
组:在正则中用()来表示,作用是结果可以被重用,如(.)\\1+,代表的是任意字符出现了多次,就业是叠词
捕获:在正则中可以使用$加上组的编号来完成捕获的,如:"(.)\\1+", "$1"这个$1就代表组代表的元素
三、正则表达式主要有四种具体功能:匹配、切割、替换和获取
1、匹配:用规则匹配整个字符串,只要有一处不符合,就匹配结束,返回false
/* * 网页爬虫(蜘蛛)获取网页数据工具 */public class RegexTest2 {public static void main(String[] args) throws IOException {//getMail();getMailByNet();}/* * 获取网页数据,获取网页上有关邮箱的数据 */public static void getMailByNet() throws IOException {URL url = new URL("http://192.168.229.1:8080/myweb/mail.html");URLConnection conn = url.openConnection();BufferedReader bfrin = new BufferedReader(new InputStreamReader(conn.getInputStream()));String mailReg = "\\w+@\\w+(\\.[a-zA-Z])+";Pattern p = Pattern.compile(mailReg);String line = null;while ((line = bfrin.readLine()) != null) {Matcher m = p.matcher(line);while (m.find()) {System.out.println(m.group());}}bfrin.close();}/* * 获取指定文档中的邮件地址。 使用获取功能。Pattern Matcher */public static void getMail() throws IOException {BufferedReader bfr = new BufferedReader(new FileReader("mail.txt"));String mailReg = "\\w+@\\w+(\\.[a-zA-Z])+";Pattern p = Pattern.compile(mailReg);String line = null;while ((line = bfr.readLine()) != null) {Matcher m = p.matcher(line);while (m.find()) {System.out.println(m.group());}}bfr.close();}}