您的位置:首页 > 职场人生

黑马程序员---JAVA基础--正则表达式(十六)

2013-12-29 22:40 295 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 

 

一、正则表达式的概述

1、正则表达式是符合一定规则的表达式。
(1) 特点:用一些特定的符号来表示一些代码的操作,这样简化书写。

(2)作用:专门用于操作字符串。

(3)好处:可以简化对字符串的复杂操作。

(4)弊端:符号定义越多,正则越长,阅读性越差。

2、具体的操作功能

(1)匹配:String matches方法;

(2)切割:String split方法;

(3)替换:String replaceAll(regex,str);//如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中已有的组;

(4)获取:将字符串中符合规则的子串匹配取出。

3、使用技巧:到底用四种功能中的哪一个呢?或者哪几个呢?

            思路方式:

1)如果只想知道该字符是否对是错,使用匹配。

2)想要将已有的字符串变成另一个字符串,替换。

3)想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的子串。

4)想要拿到符合需求的字符串子串,获取。获取符合规则的子串。

切割:获取规则以外的子串。               获取:获取符合规则的子串。

4、(1)字符类

[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]]   a、e 或 f(交集)

[a-z&&[^bc]]    a 到 z,除了 b 和 c:[ad-z](减去)

[a-z&&[^m-p]]  a 到 z,而非 m 到 p:[a-lq-z](减去)

(2)预定义字符类

.                 任何字符(与行结束符可能匹配也可能不匹配)

\d                数字:[0-9] 

\D                非数字: [^0-9] 

 \s               空白字符:[ \t\n\x0B\f\r] 

 \S                非空白字符:[^\s] 

 \w                单词字符:[a-zA-Z_0-9] 

\W                非单词字符:[^\w]

(3)边界匹配器

^                 行的开头

$                 行的结尾

\b                单词边界

\B                非单词边界

\A                输入的开头

\G                上一个匹配的结尾

\Z                输入的结尾,仅用于最后的结束符(如果有的话)

\z                输入的结尾

(4)Greedy 数量词

X?                X,一次或一次也没有

X*                X,零次或多次

X+                X,一次或多次

X{n}              X,恰好 n 次

X{n,}             X,至少 n 次

X{n,m}            X,至少 n 次,但是不超过 m 次。

二、经典案例

网页爬虫(蜘蛛)

 

import java.io.*;
import java.util.regex.*;
import java.net.*;
import java.util.*;
class RegexTest2
{
public static void main(String[] args) throws Exception
{
getMails_1();
}

public static void getMails_1()throws Exception
{
URL url = new URL("http://192.168.1.254:8080/myweb/mail.html");
URLConnection conn = url.openConnection();
BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
String mailreg = "\\w+@\\w+(\\.\\w+)+";
Pattern p = Pattern.compile(mailreg);
while((line=bufIn.readLine())!=null)
{
Matcher m = p.matcher(line);
while(m.find())
{
System.out.println(m.group());
}
}
}

/*
获取指定文档中的邮件地址。
使用获取功能。Pattern  Matcher
*/
public static void getMails()throws Exception
{
BufferedReader bufr =
new BufferedReader(new FileReader("mail.txt"));
String line = null;
String mailreg = "\\w+@\\w+(\\.\\w+)+";
Pattern p = Pattern.compile(mailreg);
while((line=bufr.readLine())!=null)
{
Matcher m = p.matcher(line);
while(m.find())
{
System.out.println(m.group());
}
}
}
}


 

----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: