String 类里面matches()方法。

正则表达式通过一些特定的符号来体现规则,因此需要掌握其特定的符号。

虽然简化了代码,但是阅读性变差。

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

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"写于规则内

\D

非数字: [^0-9]

\s

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

\S

非空白字符:[^\s]

\w

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

\W

非单词字符:[^\w]



Greedy 数量词

X?

X,一次或一次也没有

X*

X,零次或多次

X+

X,一次或多次

X{n}

X,恰好 n

X{n,}

X,至少 n

X{n,m}

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



边界匹配器

^

行的开头

$

行的结尾

\b

单词边界

\B

非单词边界

\A

输入的开头

\G

上一个匹配的结尾

\Z

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

\z

输入的结尾

2、正则表达式对字符串的常见操作:

a、匹配


其实使用的就是String类中的matches方法。

\\d{9}"           手机号码检验



b、切割

其实使用的就是String类中的split方法。

String str="zhangsan        xiaobai           dashu";
String []names=str.split(" +");
for (String name:names)
System.out.println(name);
String str="zhangsan.xiaobai.dashu";
String []names=str.split("\\.");





String str="zhangsanttttttxiaobaihhhhhhdashu";
String []names=str.split("(.)\\1+");




组的概念,()然后想成自动生成组别名称,从1开始。


捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C)))



1((A)(B(C)))2\A3(B(C))4(C)



组零始终代表整个表达式。 


c、替换

其实使用的就是String类中的replacAll()方法。

$对已有的正则表达式中的规则进行获取。


例1:将叠文替换成一个字符


String str="zhangsanttttttxiaobaihhhhhhdashu";
str=str.replaceAll("(.)\\1+","$1");
System.out.println(str);




String str="15832595623";
str=str.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");
System.out.println(str);



d、获取



类 Pattern



正则表达式的编译表示形式。



java.util.regex 


//将正则规则进行对象的封装

Pattern p = Pattern.compile("a*b");

//通过正则对象的matcher方法字符串相关联。获取要对字符串操作的匹配器对象Matcher

Matcher m = p.matcher("aaaaab");

//通过Matcher匹配器对象的方法对字符串进行操作

boolean b = m.matches();

示例:查找有三个字母的单词!


String str = "da jia hao, ming tian bu fang jia";
String regex = "\\b[a-z]{3}\\b";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);

while ( matcher.find())
System.out.println(matcher.group());



3、正则表达练习:


String text="我我..我我我...我我我我我..我要要要....要" +
                "要要要..要要..学学学学学..学..编编..编编..编编...程程..程程";
text = text.replaceAll("\\.+","");
text = text.replaceAll("(.)\\1+","$1");
System.out.println(text);



b、对IP地址排序


TreeSet <String >treeSet= new TreeSet<String>();


ts.add(ip); 

String ip_str="192.168.10.34  127.0.0.1 3.3.3.3   105.70.11.55";

ip_str = ip_str.replaceAll("(\\d+)","00$1");
ip_str = ip_str.replaceAll("0*(\\d{3})","$1");

String []ips = ip_str.split(" +");

TreeSet <String >treeSet= new TreeSet<String>();
for (String i:ips)
{
	treeSet.add(i);
}

for (String i:treeSet){
	System.out.println(i.replaceAll("0*(\\d+)","$1"));
}



c、对邮件地址校验


public static void main(String[] args) {
String mail = "abc1@sina.com.cn";
String regex ="[a-zA-Z0-9]\\w*@[a-zA-Z0-9]+(\\.[a-zA-Z]{1,3}){1,3}";

boolean b = mail.matches(regex);
System.out.println(mail+":"+b);
}



4、网络爬虫:

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。