java基础(十三):正则表达式

正则表达式是对字符串的操作。

1.匹配器

         (1).字符:

                  \r:回车                                                                        

                  \n:换行

                  \f:换页符

         (2).字符类

                  [abc]:abc字符

                  [a-zA-Z]:a-z并集A-Z

                  [^abc]:除了abc的其他字符

                  [a-z&&[def]]:def(交集)

         (3).预定义字符类

                  \w:单词字符                                    \W:非单词字符

                  \s:空白字符                                     \S:非空白字符

                  \d:数字[0-9]                                    \D:非数字

                  .:匹配所有字符

         (4).边界匹配器

                  \A:输入开始                                    \Z:输入最后

                  ^:行的开头                                      $:行的结尾

                  $1:第一个括号里的内容                 \b:单词边界

         (5).数量匹配

                  +:一次或多次

                  *:0次或多次

                  ?:0次或一次

                  {m}:m次

                  {m,}:至少m次

                  {m,n}:m至n次

 

2.正则用途:匹配,切割,替换,获取

         (1).匹配:str.matches(regex)

         (2).切割:str.split(regex);

         (3).替换:str.replaceAll(regex,new Str);

         (4).获取:Pattern p = Pattern.compile(regex);

                         Matcher m = p.matcher(str);

                         while(m.find()){m.group();}

 

3.正则基本功能实例:

         (1).匹配电话号码

                  String regex = "1[358]\\d{9}";

                  boolean b = tel.matches(regex);

         (2).切割字符串

                  String str = "zhangsan%%lisi%%wangwu";

                  String regex = "(.)\\1+";//任意字符重复2次及以上

                  String[] strs = str.split(regex);

         (3).替换字符串

                  String str = "zhangsan%%lisi%%wangwu";

                  str = str.replaceAll("(.)\\1+","&");

         (4).获取长度为3的单词

                  String str = "da jia zhu yi le ";

                  String regex = "\\b[a-zA-Z]{3}\\b";

                  Pattern p = Pattern.compile(regex);

                  Matcher m = p.matcher(str);

                  while(m.find()){

                           System.out.println(m.start()+m.group()+m.end());

                  }

                  

4.综合案例

         (1).将   “我......我.....要....学....学...编......程.......程”   变得不结巴

                  String str =  “我......我.....要....学....学...编......程.......程” ;

                  str = str.replaceAll("(.)\\1+","");

                  str = str.replaceAll("(.)\\1+","$1");

 

         (2).对IP地址进行排序

                  String ips = "192.168.1.45    192.168.45.78    192.113.4.1   5.1.4.7    41.54.111.4";

                  ips = ips.replaceAll("(\\d+)","00$1");

                  ips = ips.replaceAll("0*(\\d{3})","$1");

                  String[] ipStr = ips.split(" +");

                  sort(ipStr);

                  for(String ip:ipStr){

                           System.out.println(ip.replaceAll("0*(\\d+)","$1"));

                  }

         

         (3).将网页上的邮箱全都保存下来  (贴子里那种邮箱发种子的可能就是在收集你们的邮箱哦,注意了!)

                  public static void main(String[] args){

                           File file = new File("1.html");

                           BufferedReader br = new BufferedReader(new FileReader(file));

                           String regex = "\\w+@\\w+(\\.\\w)+";

                           Pattern p = Pattern.compile(regex);

                           ArrayList<String> list = new ArrayList<String>();

                           String line = null;

                           while((line = br.readline())!=null){

                                    Matcher m = p.matcher(line);

                                    while(m.find()){

                                             list.add(m.group());

                                    }

                           }

                           for(String email:list){

                                    System.out.println(email);

                           }

                  }

 

 

 

 

         

                  

         

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏哥哥啊Aaaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值