正则表达式:
正则表达式是java中比较重要的一个小知识点。所谓正则表达式就是符合一定规则的表达式。他是专门用于操作字符串的,它是一种简化书写格式。所有的简化形式都有利有
弊,正则表达式也不例外,虽然他简化了书写,但是它的阅读性极差,虽然用起来很舒服,但是看代码的人会很头痛。
下面可以通过一个小例子简单的了解一下正则表达式:
import java.util.regex.*;
public class ShiLi
{
public static void main(String[] args)
{
p("abc".matches("...")); //matches()判断字符串是否匹配某个表达式,"."表示任何一个字符
p("a2389a".replaceAll("\\d", "*")); //将字符串"a2389a"中的数字用*替换,\d 表示“0--9”数字
Pattern p = Pattern.compile("[a-z]{3}"); //将任何是a--z的字符串长度为3的字符串进行编译,这样可以加快匹配速度
Matcher m = p.matcher("abc"); //进行匹配,并将匹配结果放在Matcher对象中
p(m.matches());
p("abc".matches("[a-z]{3}")); //上面的三行代码可以用下面一行代码代替
}
public static void p(Object o)
{
System.out.println(o);
}
}
通过上面的例子可以明白正则表达式的好处,书写简单。在上述例子中为了简化书写 用了正则表达式中的某些部分代替了常规部分,简化了书写。同时更能够体现出正则表达式的便利。
以下为正则表达式中的特殊字符:
\\ 反斜杠 (在正则表达式中"\\"都是成对出现的因为单一的"\"在正则表达式中就是一个特殊符文应该在前面再加一个"\"进行转译 )\t 间隔
\n 换行
\r 回车
\d 数字等价于[0-9]
\D 非数字等价于[^0-9]
\s 空白符号
\S 非空白符号
\w 单独字符 [a-zA-Z_0-9]
\W 非单独字符 [^a-zA-Z_0-9]
\f 换页符
\e Escape
\b 一个单词的边界
\B 一个非单词的边界
\G 前一个匹配的结束
^为限制开头 ^java 条件限制为以Java为开头字符
$为限制结尾 java$ 条件限制为以java为结尾字符
.为限制一个任意字符 java.. 条件限制为java后除换行外任意两个字符加入特定限制条件[a-z] 条件限制在小写a to z范围中一个字符
[A-Z] 条件限制在大写A to Z范围中一个字符
[a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符
[0-9] 条件限制在小写0 to 9范围中一个字符
[0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符
[0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集)
[]中加入^后加再次限制条件
[^a-z] 条件限制在非小写a to z范围中一个字符
[^A-Z] 条件限制在非大写A to Z范围中一个字符
[^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符
[^0-9] 条件限制在非小写0 to 9范围中一个字符
[^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符
[^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集)在限制条件为特定字符出现0次以上时,可以使用「*」
J* 0个以上J
.* 0个以上任意字符
J.*D J与D之间0个以上任意字符在限制条件为特定字符出现1次以上时,可以使用「+」
J+ 1个以上J
+ 1个以上任意字符
J.+D J与D之间1个以上任意字符在限制条件为特定字符出现有0或1次以上时,可以使用「?」
JA? J或者JA出现限制为连续出现指定次数字符「{a}」
J{2} JJJ{3} JJJ
文字a个以上,并且「{a,}」
J{3,} JJJ,JJJJ,JJJJJ,???(3次以上J并存)
文字a个以上,b个以下「{a,b}」
J{3,5} JJJ或JJJJ或JJJJJ
两者取一「|」
J|A J或A
Java|Hello Java或Hello在java中,正则表达式的主要应用为:字符串的替换,字符串的切分等,同时在该部分学习的时候还引入了网络爬虫的小知识点。
所谓的网页爬虫也被称之为蜘蛛。它是一段小序,他是去爬互联网上的指定信息,如:小广告。在做小广告的时候通过发(垃圾)邮件的形式制作。早期为了得到邮箱用的是随机方式或者顺序方式产生一批邮箱,然后将告页面发送过去(这种方式效率比较低下,因为自己产生的一批邮箱不一定都存在),后来通过网络获取已经存在的邮箱,如:对论坛进行读取对其中符合邮箱的信息进行筛选。网页爬虫的应用是十分广泛的,它已经应用在了网络的各个方面,我们可以通过下面一个例子来了解一下网页爬虫。
import java.io.*;
import java.util.regex.*;
import java.net.*;
class MailTest
{
public static void main(String[] args) throws Exception
{
getMailAddr();
}
public static void getMailAddr()throws Exception
{
URL url=new URL("http://bbs.itheima.com/forum.php");
URLConnection con=url.openConnection();
BufferedReader bufIn=new BufferedReader(new InputStreamReader(con.getInputStream()));
BufferedWriter bufw=new BufferedWriter(new FileWriter(new File("e://mailaddress.txt")));
String str=null;
String regex="[a-zA-Z0-9_]{6,12}@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
Pattern p=Pattern.compile(regex);
while((str=bufIn.readLine())!=null)
{
Matcher m=p.matcher(str);
while(m.find())
{
String ss=m.group();
bufw.write(ss,0,ss.length());
bufw.newLine();
bufw.flush();
}
}
}
}