------- android培训、java培训、期待与您交流! ----------
正则表达式用于操作字符串
一.实例
校验QQ号码
要求:5-15位 0不能开头,只能是数字
第一种方法
public static void checkQQ()
{
String qq="";
int len=qq.length();
boolean flag=true;
if(len>=5 && len<15)
{
if(!qq.startWith("0")){
char[] arr =qq.toCharArray();//变成一个个字符
for(int x=0;x<arr.length;x++)
{
if(!(arr[x]>='0' && arr[x]<='9'))
{
flag=false;
break
}
}
if(flag)
{
sop(qq)
}else{
sop('出现非法字符')
}
}else{
sop("不可以0开头")
}
}
}
第二种方法
public static void checkQQ()
{
String qq="";
int len=qq.length();
boolean flag=true;
if(len>=5 && len<15)
{
try{
long l=Long.parseLong(qq);
}catch(NumberFormatException e)
{
sop("出现非法字符")
}
}
}
regex正则表达式
String regex="[1-9][0-9]{4,14}后面有(从第二个算起)4-14个数,必须是数";//在定义规则
boolean flag =qq.matches(regex);//判断是否满足规则
1.匹配 String matches方法
reg="[bcd]" 字符只能b,c,d其中之一
\\d
0xob
[a-zA-z]\\d? 第一位是字母 第二位是数字 第三位要么一次或者要么没有
2.切割
splitDemo(){
String str="zhangsan,lisi"
String reg=","
String[] arr=str.split(reg);
for(String s:arr)
{
sop(s)
}
String reg=" +";//按照多个空格来切割
}
切点
\\.
按照叠词来切割
(.)\\1表示见叠词就不要
第一位是任意字符 第二位和第一位相同就行
将规则封装成一个组,用()完成,组的出现都有编号
//从1开始,\n从n组开始
组的个数用括号来数,规则封装成组
简化字符串操作,但是阅读性比较差
3.替换
str.replaceAll(reg,newStr)
replaceAll(str,"\\d{5,}","#");
将叠词替换成#号
replaceAllDemo(str1,"(.)\\1","#")
replaceAllDemo(str1,"(.)\\1+","$1")zzzzzzz---->z
$1 表示拿前面规则的第一个组
4.获取
将字符串中的字串取出
String str="ming tian jiu yao fang jia le"
第一步 正则表达式封装成对象
String reg="";
Pattern pt=pattren.compile(reg);
第二步 关联正则表达式和指定字符串
Matcher m=pt.matcher(str);获取匹配器
3.获取引擎
m.matches() String类中的matches就是用的matcherhe和pattern来完成的
只不过被String的方法封装后较为简单
4.通过引擎对符合规则的字串进行操作,比如取出
m.find()//将规则作用到字符和窜上,并进行符合规则的子串查找,逻辑型
m.group()获取匹配后的结果
单词边界
\\b[a-z]{3}\\b单词分开
m.start()
m.end()包含头不包含尾
练习str="我我...我我...我要..要要...学学...学学学.....编程"
先将"."去掉
str=str.replaceAll("\\.+","")
去叠词
str=str.replaceAll("(.)\\1+","$1");
ip地址
String ip="192.68.1.254 102.49.23.013"
ip=ip.replaceAll("(\\d+)","00$1");//找出来东西还要被重用+0,所以要封装成组
ip=ip.replacerAll("0*(\\d{3})","$1")0没有或多次,后面接着算,组的前面还是后面的0的意思
00192 出现了0 取192
002 先取三位 前面没有0
需求对邮件地址进行校验
String mail="abc12@sina.com";
String reg="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.([a-zA-Z+])+)+封装组重用";//较为精确的匹配
reg="";相对不太精确的匹配"\\w+@\\w+(\\.\\w+)+"
sop(mail.matches(reg));
网页爬虫
获取文档中的邮件地址
patter matcher
public static void getMails()
{
BufferedReader bufr=new BufferedReader(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())
{
sop(m.group());
}
}
}