黑马程序员_java入门_正则表达式

------- 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());
}
}
 
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值