正则表达式

来源:互联网 发布:qq三国淘宝游戏币 编辑:程序博客网 时间:2024/06/05 07:32


正则表达式

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

作用:专门操作字符串

特点:用于一些特定的符号来表示一些代码的操作。这样就简化书写。

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

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

String类

1、匹配:boolean  matches(regex)用规则匹配整个字符串,只要有一处不符合规则,就结束返回false。

2、切割:String[]  split(regex);

//按照叠词完成切割。为了可以让规则的结果被重用//可以将规则封装成一个组。用()完成。组的出现都有编号。//从1开始。 想要使用已有的组可以通过  \n(n就是组的编号)的形式来获取。String str1 = "erkktyqqquizzzzzo";String reg = "(.)\\1+";String[] arr = str1.split(reg);  System.out.println(arr.length);for(String s : arr){System.out.println(s);}

3、替换:String[]  replaceAll(regex,str):str为要替换为的字符串

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

当要应用的组不再同一个字符串内,想要用前一个字符串的组用$n(n为编号)。

将重叠的字符替换为单个字符,将叠词替换掉用$

4、获取:将字符串中的符合规则的子串取出。

步骤:

1)、将正则表达式封装成Pattern对象。Pattern p = Pattren。compile(regex);

2)、让正则对象和要操作的字符串相关联。p.matcher(String);

3)、关联后获取正则匹配引擎(匹配对象)。Matcher m = p.matcher(String);

其实String类中的matches方法用的就是Pattern和Matcher对象来完成。

只不过被String的方法封装后,用起来较为简单,但是功能单一。

boolen  find():匹配查找,返回找到true还是找不到false,同时记录指针,用于下次find

String  group():取出上一步find()所找到的结果。

必须用find()再group()才能获取。

通过迭代就可以把匹配到的所有结果取出。

匹配器Matcher中的指针是公用的,当用matches匹配后,指针就会产生变化,当再用find查找时,就是从匹配后的位置开始查找

{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());}}}
注意:在正则当中反斜杠“\”都是成对出现的。因为单个反斜杠“\”是代表转译,必须要转译回来。

到底用四种功能中的哪一个呢?或者哪几个呢?

思路:

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

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

3、想要安装指定的方式将字符串变成多个字符串,用切割,获取规则以外的子串。

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


网路爬虫

通过网络以及IO读取网页的源文件,并通过规则获取网页中的符合规则的数据

{URL url = new URL("http://dzh.mop.com/whbm/20060907/0/7z5S8I707f188a73.shtml");url.openConnection();BufferedReader buf = new BufferedReader(new InputStreamReader(url.openStream()));String line = null;String reg = "\\w+@\\w+(\\.\\w+){1,3}";Pattern p = Pattern.compile(reg);while((line = buf.readLine())!=null){Matcher m = p.matcher(line);while(m.find()){System.out.println(m.group());}}}















































原创粉丝点击