----------------------
ASP.Net+Android+IOS开发、
.Net培训、期待与您交流! ----------------------
一、正则概述
1、正则是用来操作字符串的特殊方法,都在String类中,是符合一定语法规则的字符串表达形式;
2、学习正则,就是学习一些特殊符号的使用,它能够简单、快捷的对字符串进行操作。
示例:对QQ号码进行校验,要求:5-15位、0不能开头、只能是数字。
思路:如果用传统方法,首先要规定长度,然后再判断首字母,最后再规定QQ字符串只能是数字形式,相当麻烦,正则校验如下:
//示例:匹配QQ号码,一共5-15位,不能0开头,全是数字
public static void checkQQ(){
String QQ = "4555555555";
String regex = "[1-9]\\d{4,14}";
/*定义字符串的规则表达式
第一位只能是1-9;第二位是 \d,即是0-9的数字,出现了4到14次*/
boolean b = QQ.matches(regex);
if(b)
System.out.println("QQ:"+QQ+",输入正确");
else
System.out.println("QQ:"+QQ+",输入错误");
}
二、正则的具体操作功能
1、匹配功能: boolean matches(String regex),用规则匹配整个字符串,只要有一处不符合规则,匹配结束返回false。
//匹配手机号,以13、15、18开头的11位数字
public static void checkTel(){
String tel = "16900001111";
String telReg = "1[358]\\d{9}";
System.out.println(tel.matches(telReg));
}
2、切割功能:String[] split(String regex),根据给定正则表达式的匹配拆分此字符串。
用点来切割、用反斜杠切割、按照叠词切割、空格切割等。
package blog.itheima;
class RegexTest {
public static void main(String[] args) {
split("qwe.rfff.tjda.sf.hjj","\\.");//切割字符,其中有小数点
split("E:\\JAVA\\Test\\1.6","\\\\");//用反斜杠把盘符和文件夹名切割出来
split("qwerfffftjdasfhjjasgg","(.)\\1+");//按照叠词切割
split("qwe rfff tjda sf hjj"," +");//切割字符,其中有空格
}
//正则的切割
public static void split(String s, String regex){
String[] arr = s.split(regex);
for(String st : arr){
System.out.println(st);
}
}
}
3、替换功能:String replaceAll(String regex, Stringreplacement),使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
package blog.itheima;
class RegexTest {
public static void main(String[] args) {
replaceAll("qwerfffftjdasfhjjasgg","(.)\\1+","&");//把叠词换成字符&
replaceAll("qwerfffftjdasfhjjasgg","(.)\\1+","$1");//把叠词换成相同的单个字母
replaceAll("qwe12332234324asfhj234423432gg","\\d+","#");//把数字换成#号
replaceAll("qwe12df4asj2342343tt23432gg","\\d{4,}","#");//若数字出现4个以上,就换成#号
}
//正则的替换
public static void replaceAll(String str,String regex,String newStr){
str = str.replaceAll(regex,newStr);
System.out.println(str);
}
/* 打印结果:
qwer&tjdasfh&as&
qwerftjdasfhjasg
qwe#asfhj#gg
qwe12df4asj#tt#gg*/
}
4、获取功能:
import java.util.regex.Pattern;
class RegexTest {
public static void main(String[] args) {
//切出三个字母的单词
String str = "Ming tian jiu ke yi CRH hui Wuhan la, haha !";
String regex = "\\b[a-zA-Z]{3}\\b";//其中 \b表示单词边界
//将正则封装成对象
Pattern p = Pattern.compile(regex);
//获取正则匹配器,并和字符串相关联
Matcher m = p.matcher(str);
//boolean find() 按照匹配器的规则进行查找输入序列的下一个子序列。
while(m.find()){
System.out.println(m.group());//返回符合规则的子序列
System.out.println(m.start()+"-----"+m.end());
//获得子序列在没改变字符串之前的初始和终止角标,包头不包尾
}
}
}
三、选取正则四种功能的思路
1、如果只想知道该字符是对是错,使用匹配功能;
2、想要将已有的字符串变成另一个字符串,替换;
3、想要按照自定义的方式将字符串变成多个字符串(或者获取规则以外的字符串),切割;
4、想要拿到符合需求的字符串子串,获取。
四、代码实例
1、制作网页蜘蛛,对网页上的邮箱进行抓取,并打印到控制台。
2、将ip地址进行地址段自然排序。
package blog.itheima;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class RegexWebSpider {
public static void main(String[] args) throws Exception{
//getMails();
ipSort();
}
//1、制作网页蜘蛛,对网页上的邮箱进行校验,并打印成文本文件。
public static void getMails() throws Exception{
//任意指定需要获取资源的网页
URL url = new URL("http://tieba.baidu.com/p/2347771086?pid=33278533714&cid=0#33278533714");
//也可以从指定文件中读取资源
//BufferedReader bf = new BufferedReader(new FileReader("mail.txt"));
//连接到url所引用的远程对象
URLConnection conn = url.openConnection();
BufferedReader bf =
new BufferedReader(new InputStreamReader(conn.getInputStream()));
//对邮箱进行验证: \w 单词字符:[a-zA-Z_0-9]
String reg = "\\w+@\\w+(\\.\\w+)+";
Pattern p = Pattern.compile(reg);
String line = null;
while ((line=bf.readLine())!=null){
Matcher m = p.matcher(line);
while(m.find()){
System.out.println(m.group());
}
}
}
//2、将ip地址进行地址段自然排序。
public static void ipSort(){
String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";
ip = ip.replaceAll("(\\d+)","00$1");//把一个或者多个数字当作一组,先补二个0
System.out.println(ip);
//只留后三位数,去掉前面0,0*指0个或多个
ip = ip.replaceAll("0*(\\d{3})","$1");
System.out.println(ip);
String[] arr = ip.split(" ");
Arrays.sort(arr);
for(String a : arr){
System.out.println(a.replaceAll("0*(\\d+)","$1"));
}
}
}
----------------------
ASP.Net+Android+IOS开发、
.Net培训、期待与您交流! ----------------------