黑马程序员_JAVA_正则表达式

来源:互联网 发布:什么是域名申请流程 编辑:程序博客网 时间:2024/05/22 06:57
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

正则表达式符合一定规则的表达式

       作用:   用于专门操作字符串
       特点:  用一些特定符号表示一些代码操作,简化书写

弊端:符号定义过多,正则越长,阅读性越差

验证QQ号
     public static void checkQQ()     {          String qq = "674143143";          int len = qq.length();          if(len>=5 && len<=15)          {               if(!qq.startsWith("0"))               {                    try{                         long l = Long.parseLong(qq);                    }                    catch(NumberFormatException e)                    {                         System.out.println("出现非法字符");                    }                             }          }     }


用正则表达式能简化验证过程

常用规则
[abc]中定义一个位置可能出现的字符
[^abc]除了abc
[a-zA-Z]所有字母,[a-d[m-p]]并集[a-z&&[sgf]]取交集[a-z&&[^c-i]]

预定义中的'\'要成对出现,因为需要转义

\d数字
\D非数字
\w数字字母下划线
\W非(数字字母下划线)

数量词
X?一次或一次也没有
X*零次或多次
X+一次或多次
X{n,m}至少n次,不超过m次
X{n},X{n,}

.表示任意字符,"\\."表示实际的'.';

可以将规则进行封装成组
(()(()()))多个组时,判断是第几个组,只需要数是第几个'(';

具体操作功能:

1.匹配:String matchs方法

     public static void checkQQ()     {          String qq = "564643356";          String regex = "[1-9][0-9]{4,14}";          boolean flag = qq.matches(regex);          if(flag)               System.out.println(qq+"验证通过");          else               System.out.println(qq+"不合法");     }}

2.切割:String split()

     splitDemo("c:\\as\\dgd.log","\\\\");//'\'用来转义'     splitDemo("akhsffklhgjjdshaaagls","(.)\\1+");//用叠词切割,用到了组的概念     public static void splitDemo(String str,String reg)     {          String[] arr = str.split(reg);                   for(String s : arr)          {               System.out.println(s);          }     }


3.替换:String replaceAll()

     String str = "as554s65ssg454546sa";
     str.replace("\\d{5,}","*");
     str.replace("(.)\\1+","$1");//$1拿前一个规则中的第一个组

4.获取:将字符串中符合规则的字串取出

1.将正则表达式封装成对象
2.让正则表达式对象和要操作的字符串相关联,获取匹配器对象
3.关联后,取出正则匹配引擎
4.通过引擎对符合规则的字串进行操作,比如取出


     public static void getDemo()     {          String str = "ming tian hui chi rou ma ";          String reg = "\\b[a-z]{3}\\b";//'\b'单词边界          //规则封装成对象          Pattern p = Pattern.compile();          //对象与要操作的字符串关联,获取匹配器对象          Matcher m = p.matcher(str);          //只有find后才能取,一次取一个子串          while(m.find())          {               System.out.println(m.group());          }

正则表达式中"\"要成对出现
m.find()将规则作用到字符串上,并进行符合规则的子串查找
group()方法用于获取匹配后的结果,只有find后才能取
end(),start();获得子串的索引位置
匹配是拿规则依次在原字符串进行查找
matches();是否符合规则,返回真假,会移动匹配器的指针

网页爬虫(蜘蛛)

class netSpider{        public static void main(String[] args) throws IOException{              URL url = new URL("http://baike.baidu.com/view/118321.htm" );//获取URL对象              URLConnection conn = url.openConnection();//打开连接                            Pattern p = Pattern. compile("\\w+@\\w+(\\.\\w+)+");                            BufferedReader bufr = new BufferedReader(new InputStreamReader(conn.getInputStream()));              BufferedWriter bufw = new BufferedWriter(new FileWriter("cd.txt"));              String line = null;               while((line=bufr.readLine())!=null){                     Matcher m = p.matcher(line);                      while(m.find()){                           System. out.println(m.group());                           bufw.write(m.group());                           bufw.newLine();                     }              }              bufr.close();              bufw.close();       }}


0 0
原创粉丝点击