正则表达式:符合一定规则的表达式,它用于操作字符串,这样就简化对字符串的复杂操作。不过符号定义越多,正则越长,阅读性就会越差。
字符类
[abc]
[^abc]
[a-zA-Z]
[a-d[m-p]]
[a-z&&[def]]
[a-z&&[^bc]]
[a-z&&[^m-p]]
预定义字符类
.
\d
\D
\s
\S
\w
\W
"."是正则表达式里面的符号。它代表任意字符。所以,当想要用正常的.来切割的时候,就需要对正则表达式中的.进行转义。也就是\.
Greedy
X?
X*
X+
X{n}
X{n,}
X{n,m}
边界匹配器
^
$
\b
\B
\A
\G
\Z
\z
组
当想要对一个规则的结果进行重用,可以把这个规则封装成组,装进()中,这样这个组里的结果就可以重用。组从第一组开始标号。通过\N(n就是组的编号)的形式来表示捕获的组的内容,即表示当前这位上的规则要使用的规则就是那一组的规则的结果的重用。
Eg:
规则(.)\1中表示第一位是任意字符,第二位是对第一位的结果的重用。当把这个规则封装进String中时,要对\进行转义。即:"(.)\\1"
怎么看分辨组:一对括弧一组。按照括弧的顺序对组从1开始编号。
$的用法
【通过$n可以获取到前面的规则中的第N组的结果。】
eg:
replaceAllDemo(Str,"(.)\\1+","$1").$1表示获取(.)这个组的结果来使用。
具体操作功能
1.匹配:
String类中的matches(regex)方法,用规则匹配字符串,只要有一处不符合规则就匹配结束,返回false
2.切割:
String类中的split(String
3.替换
String类中的replaceAll(String
4.获取
将字符串中符合规则的子串取出
1.把正则封装成pattern对象.static
2.把正则对象和字符串关联
3.在匹配器中查找符合规则的字符串
4.取出这个字符串
①.Pattern类
static
Matcher
②.Matcher类
匹配器:同一个匹配器中使用同一个索引
通过解释
创建匹配器后,可以使用它执行三种不同的匹配操作:
matches
lookingAt
find
boolean
String
得先找后获取:
while(find())
{
group()
}
Eg:
String str="";
String regexstr="";
Pattern p =Pattern.compile(String regexstr)//创建正则对象
Matcher m = p.matcher(str);//字符串与正则对象关联
while(m.fing())//查找
{
m.group();//取出
}
思路方式:
1,如果只想知道该字符是否对是错,使用匹配。
2,想要将已有的字符串变成另一个字符串,替换。
3,想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的子串。
4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。
实例:网页爬虫
/*
网页爬虫(蜘蛛)
*/
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.112: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());
}
}
}
}