黑马程序员——正则表达式

来源:互联网 发布:投稿被怀疑数据造假 编辑:程序博客网 时间:2024/06/05 20:23
------- android培训、java培训、期待与您交流! ----------

正则表达式:符合一定规则的表达式。

作用:用于专门操作字符串。

好处:简化了字符串的复杂操作。

特点:用一些特定的符号来表示一些代码的操作。学习正则表达式就是学习一些特殊符号的使用。

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

 

例:检验QQ号是否合法,关键代码如下:

String qq="8491823";

String regex="[1-9][0-9]{4,14}";//正则也是String类对象,此行代码中[1,9]代表qq第一位是1-9的任意一个数字,而[0-9]{4,14}则表示数字0-9在此出现4-14次

boolean flag=qq.matches(regex);

 

“\d”指的是数字,"\\d":在正则表达式中,反斜杠都是成对出现的!

 

正则表达式的具体操作如下:

1.匹配:

str1.matches(regex);//上述例子中就有描述

2.切割·:

String[]  split(String regex)

例:

String reg =" +";//空格符出现一次或者多次

String reg=".";//此处的.代表任意一个字符

String reg="\\."//记住,如需要用到点,必须要双反斜杠转义

 

(.),用()把规则封装成组,以便重用

用()封装成组的规则都有编号,需要重用则\\n

例:(.)\\1+

“$1”指拿前一个规则的第一个组的规则

((()()())如果要找多少组,看左括号,有多少个左括号就有多少组。

3.替换:

str.replaceAll(regex,replacement)      //将replacement替换掉str中符合regex规则的子串

4.获取:

将字符串中符合规则的子串取出

步骤:

①将正则表达式封装成对象

Pattern p=Pattern.compile(regex);

②让正则对象和要操作的字符串关联

Matcher m=p.matcher(str);

③关联后,获得正则表达式的匹配引擎

m.matches();//其实String类就将上述两对象完成分装,只不过分装后的功能单一

④通过引擎对符合规则的子串进行操作,比如取出

while(m.find()){    //将规则作用到字符串上,并进行符合规则子串的查找

m.group();           //获取匹配后的结果

}

 

例:纠正结巴

String str="我我我我我我.....我..我要..要..要要要学...学学....学....编...编程";

思路:

1.先将点去掉

2.将重复的内容去掉

 关键代码如下:

str=str.replaceAll("\\.+","");

str=str.replaceAll("(.)\\1+","$1");//将任意字符出现一次或者多次替换成当前字符(.)和\\1+和$1都是指封装任意字符的这个规则组

 

例:IP地址的排序

String ip="192.164.2.1 102.2.234.2 10.10.10.10 2.2.2.2";

思路:

1,将IP地址每个地址段前补足两个0,然后取后3位,即有效位

2,分割IP地址,然后将IP地址直接放入TreeSet中排序

ip=ip.replaceAll(“(\\d+)”,“00$1”);     //上来就先补0

ip=ip.repalceAll("0*(\\d{3})","$1");//取后面3个有效位

String[] arr=ip.split(" +");//按一个空格或多个空格分隔IP地址段

TreeSet ts=new TreeSet();//然后将IP地址段字符串扔里面去,当然,重复的话是放不进去的

最后,用replaceAll("0*(\\d+)","$1");恢复格式

 

一定要掌握:邮件地址进行校验 

str.matches(reg);//str为邮箱字符串

String reg ="[a-zA-Z0-9_]+@[A-Za-z0-9]+([\\.a-zA-Z]+)+";//较为精确的匹配

 

网页爬虫(蜘蛛)

获取指定文档中的邮件地址,使用获取功能Pattern Matcher

关键代码如下:

URL url=new URL("http://......");

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());

}

}

通过此次正则表达式的学习,知道了一些特殊符号的用法,主要查阅API,而且难点的还是在第一个例子QQ的校验,对Pattern和Matcher的用法

0 0
原创粉丝点击