------- android培训、java培训、期待与您交流! ----------
正则表达式:符合一定规则的表达式
作用:用于专门操作字符串
特点:用特定符号来表示一些代码操作,简化了书写。
学习正则表达式就是学习一些特殊符号的使用!
好处:可以简化对字符串的复杂操作
弊端:阅读性差
具体操作功能:
1,匹配:String matches()方法。用规则匹配整个字符串
2,切割:String split()
3,替换:replaceAll()
4,获取:按规则取子串
步骤:
a,将正则表达式封装对象
b,正则对象和操作的字符串相关联
c,获取正则匹配引擎
d,通过引擎对符合规则的子串操作
练习和演示:
public class RegexDemo
{
public static void main(String[] args)
{
//check();
splitD();
}
//匹配
public static void check()
{
//1
/*String qq="1223435";
String reg="[1-9]\\d{4-14}";//首位非0的5-15位数字
boolean a=qq.matches(reg);//返回boolean
//2
String tel="13343647653";
String reg1="[1][358]\\d{9}";//13,15,18号段的11位数字
boolean b=tel.matches(reg1);*/
//3
String str="a";
String reg2="[a-zA-Z]\\d*";//首位字母后边有或没有数字
System.out.println(str.matches(reg2));
}
//切割split()
public static void splitD()
{
String str="sdfj jga gjr ";
String reg=" +";//按一个或多个空格切割//按照。来切割写"\\."因为.是特殊字符//按\\切写"\\\\"//按照叠词"(.)\\1+"
String[] arr=str.split(reg);//返回一个字符串数组
//遍历打印
for(String s:arr)
{
System.out.println(s);
}
}
//替换 replaceAll()
public static void replaceD()
{
String str="1324ggerth5443yh4";
str=str.replaceAll("\\d{2,}","*");//将多于两个的连续数字替换成*
//将叠词替换replaceAll("(.)\\1+","$1");$代表引用前边规则的组
}
}
获取:
import java.util.regex.*;
public class RegexDemo2
{
public static void main(String[] args)
{
getDemo();
}
public static void getDemo()
{
String str="fals kde ksdfj wief, ale kf";
//规则
String reg="\\b[a-z]{3}\\b";//\b单词边界
//将规则封装成对象
Pattern p=Pattern.compile(reg);//格式。。。
//关联对象和字符串
Matcher m=p.matcher(str);
while(m.find())//find是将规则作用在字符串上
{
System.out.println(m.group());//group获取find后的结果。
}
}
}
两个练习:
将文字改成我爱中国
用到替换
import java.util.*;
public class RegexTest
{
public static void main(String[] args)
{
//method();
//ipSort();
checkMail();
}
public static void method()
{
String str="我.我爱爱..爱爱中.中中...中国国";
//定义规则
String reg1="\\.+";
String reg2="(.)\\1+";
str=str.replaceAll(reg1, "").replaceAll(reg2, "$1");
System.out.println(str);
}
public static void ipSort()
{
String ip="192.168.0.2 193.168.3.2 192.168.0.1 2.2.24.3";
//保证每个地址段最少三位
ip=ip.replaceAll("(\\d+)", "00$1");//一个或多个数字,替换成多加两个0的一个或多个数字
//确定每个字段有三位
ip=ip.replaceAll("0*(\\d{3})", "$1");//0*前边没有或多个0,后边确定有三个数字,替换成三个数字
//按照空格切割
String[] arr=ip.split(" +");//存到数组里
//新建一个可排序集合:TreeSet
TreeSet<String> ts=new TreeSet<String>();
//将数组元素添加到集合中
for(String s:arr)
{
ts.add(s);
}
//将集合中元素打印出来,(集合自动排序)
for(String s:ts)
{
System.out.println(s.replaceAll("0*(\\d+)", "$1"));//将前边的0去掉
}
}
//对邮件地址进行校验
public static void checkMail()
{
String mail="saffsd@sina.com";
String reg="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-z]+){1,3}";
System.out.println(mail.matches(reg));
}
}
网页爬虫
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.*;
public class RegexTest2
{
public static void main(String[] args) throws IOException
{
URL url=new URL("");//写入服务器地址,访问文件地址
URLConnection con=url.openConnection();
BufferedReader br=
new BufferedReader(new InputStreamReader(con.getInputStream()));
String line=null;
String reg="\\w+@\\w+(\\.\\w+)+";
Pattern p=Pattern.compile(reg);
while((line=br.readLine())!=null)
{
Matcher m=p.matcher(line);
while(m.find())
{
System.out.println(m.group());
}
}
}
}