黑马程序员_正则表达式

来源:互联网 发布:centos bugzilla安装 编辑:程序博客网 时间:2024/06/18 08:02

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

一、qq号码验证

       对qq号码进行验证,要求qq号码符合三个条件1,5~15位,2,不能以0开头,3,只能是数字。

       1,普通验证

public class CheckQQ {public static void main(String[] args) {String qq = "23343434";check_qq(qq);}private static void check_qq(String qq) {if(qq.length()>=5&qq.length()<=15){if(!qq.startsWith("0")){try{Long l = Long.parseLong(qq);System.out.println(l+"is ok");}catch (Exception e){System.out.println("非法字符");}}else{System.out.println("不能以0开头");}}else{System.out.println("长度错误");}}}//打印23343434is ok

        2,采用正则表达式的方式

public class CheckQQ {public static void main(String[] args) {String qq = "23345434";check_qq(qq);}private static void check_qq(String qq) {String regex = "[1-9][0-9]{4,14}";boolean flag = qq.matches(regex);if(flag){System.out.println(qq+"is ok");}else{System.out.println("不存在");}}}//打印23345434is ok

       通过两个程序可以看出,普通方式需要使用大量的ife-lse语句依次对每个条年进行判断,而使用正则表达式判断要简洁多。因此正则表达式用于处理字符串更加灵活。

二、正则表达式

       符合一定规则的表达式,专门用于操作字符串,简化字符串操作

       1,正则表达式的常见规则

 

 三、正则表达式-匹配
        String类的 matches(String regex)方法,告知此字符串是否匹配给定的正则表达式
        需求:验证电子邮件的格式
private static void check_matches() {String email = "shisong@163.com";String regex = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+"; boolean b = email.matches(regex); System.out.println(b);}
四、正则表达式-切割
       String类的split(String regex)方法,根据给定正则表达式匹配拆分此字符串
       1,普通切割
public static void method_split(){String str = "192      168    3      123";String[] arr = str.split("(.)\\1+");for(String s : arr){System.out.println(s);}}//打印:192,168,3,123
       2,利用组捕获--按叠词切割
             正则表达式中用()定义组,利用\引用定义的组,组数默认从1开始
             需求: 形如"abqqqqqcdettfdhhgtnssth"的字符串中含有叠词如qqqqq,按照这些叠词将字符串切割
             2.1,第一位可以是任意字符,因此定义 .
             2.2,将其定义成组(.
             2.3,第二位引用第一位组\\1,出现1或多次\\1+
                 2.4,完整的定义规则为:(.)\\1+
public static void method_split(){String  str = "abqqqqqcdettfdhhgtnssth";//正则组,()专门处理叠词String[] arr = str.split("(.)\\1+");for(String s : arr){   System.out.println(s);}}//打印结果:ab,cde,fd,gtn,th
五、正则表达式-替换
       String类的replaceAll(String regex, String replacement)方法,使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
       需求:将字符串"helllowssorrrrrld"中叠词如lll替换成单个字符l
                  1,定义叠词规则:(.)\\1+
                  2,替换的内容引用被替换的内容,使用$引用,标号由1开始
public static void method_replaceAll(){   String str = "helllowssorrrrrld";   String s = str.replaceAll("(.)\\1+","$1");   System.out.println(s);}//打印:helowsorld
六、正则表达式-获取
          使用的是java.util.regex.Pattern,和java.util.regex.Matcher
        1,步骤
             1.1,定义正则表达式规则     
             1.2,将正则封装成对象
             1.3,正则对象与要操作的字符串匹配,获取搜索引擎
             1.4 使用Matcher类的方法  进行查找与获取
         2,程序示例,需求:"wo de jia zai yuan fang ni mei qu guo",找出三个字母的单词
                   2.1,定义正则规则:\\b[a-zA-Z]{3}\\b
                   2.2,封将正则封装成对象:Pattern p = Pattern.compile(reg)
              2.3,获取搜索引擎:Matcher m = p.matcher(str)
                  2.4,通过Matcher查找,获取
public static void method(){    String str = "wo de jia zai yuan fang ni mei qu guo";//找出3个字母的单词//预编译正则String reg = "\\b[a-zA-Z]{3}\\b";Pattern p = Pattern.compile(reg);//正则规则,匹配字符串Matcher m = p.matcher(str);while(m.find()){System.out.println(m.group());}}//打印结果:jia,zai,mei,guo
七、正则表达式总结
       1,只想知道字符串是否是对错,选择匹配
       2,将已有字串变成另一个字串,选择替换
       3,想要按特定方式将字串变成多个子串,选择切割
       4,拿到符合规则的子串,选择获取
八、网页邮箱爬虫
       1,定义满足邮箱格式的正则表达式规则:String reg = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+"
       2,利用URLConnection建立 资源连接
       3,利用流读取 网页内容
       4,对读取的内容进行查找和获取
import java.net.*;import java.util.regex.*;import java.io.*;class CatchEmail {public static void main(String[] args) throws Exception{String reg = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";URL url = new URL("http://www.taobao.com");//开启连接URLConnection conn = url.openConnection();BufferedReader bfr = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line = null;while((line = bfr.readLine())!=null){    Pattern p = Pattern.compile(reg);Matcher m = p.matcher(line);while(m.find()){System.out.println(m.group());}}}}



 

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

0 0