您的位置:首页 > 编程语言 > Java开发

java正则表达式例程 提取网页中的email 统计代码的空行 有效代码行 注释行

2010-10-27 22:01 831 查看
//dfa
package com.xie.regexexpression;
    
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {
 private static long codeNum=0;
 private static long commentNum=0;
 private static long whiteNum=0;

 public static void main(String[] args) {
          //start();
    //startThink();
    //startRage();
    // startDefine();
    //startBorder();
    //startWhiteLine();
    //匹配email地址
  
/*  String m1="[//w[.-]]+@[//w[.-]]+//.[//w[.-]]+.*";
  p("centrez@126.com.org".matches(m1));*/
  
  //startFind();
  
  //startReplace();
  
  //startGroup();
  //emailSpilder();
  count();
 }
 
 public static void p(Object o){
  System.out.println(o);
 }
 public static void start(){
  //简单认识正则表达式的概念
  p("abc".matches("..."));
  p("a825412b".replaceAll("//d", "-"));
  //以下3句是先将模式编译好
  Pattern p=Pattern.compile("[a-z]{3}");
  Matcher m=p.matcher("fgh");//创建一个有限状态的自动机
  p(m.matches());
  //匹配时现场编译
  p("fgh".matches("[a-z]{3}"));
  p("  aa// aadb".matches(".*//.*"));
  
 }
 public static void startThink(){
  //初识. + * ?
     /**
      * .表示一个任意字符
      * *表示0个或者多个字符
      * +表示1次或者多次
      * ?表示0次和1次
      */
  p("a".matches("."));
  p("aaa".matches("aaa"));
  p("aaaa".matches("a*"));
  p("aaaa".matches("a+"));
  p("".matches("a*"));
  p("aaaa".matches("a?"));
  p("".matches("a?"));
  p("".matches("a?"));
  p("1224545132233545".matches("//d{10,100}"));
  p("192.168.0.aaa".matches("//d{1,3}//.//d{1,3}//.//d{1,3}//.//d{1,3}"));
  p("192".matches("[0-2][0-9][0-9]"));
  p("www.baidu.com".matches("w{3}//.//w+//.[com]+"));
  
  p("www.baidu.com.cn".matches("w{3}//.//w+//.[com]+"));
  
  p("http://www.baidu.com".matches("w{3}//.//w+//.[com]+"));
  p("http://www.baidu.com".matches("http://w{3}//.//w+//.[com]+"));

 }
 public static void startRage(){
  //范围
  p("a".matches("[abc]"));//a b c中的一个
  p("a".matches("[^abc]"));//不在 a b c中的一个
  p("A".matches("[a-zA-Z]"));
  p("A".matches("[a-z[A-Z]]"));
  p("A".matches("[a-z]|[A-Z]"));//[a-z]||[A-Z]也是对的
  p("B".matches("[A-Z]&[B]"));//A到Z中并且在RFG中,???? 返回false搞不懂
 }
 public static void startDefine(){
  p(" /t/n/f/r".matches("//s{5}"));// /s表示空白字符
  p(" ".matches("//S"));// /S表示非空白字符
  p("wo__8885".matches("//w{8}"));// /w表示单词字符
  p("abc756@&%$".matches("[a-z]{1,3}//d+[@#$^%&]+"));
  p("//".matches("////"));//在java中/的表示为//,而在正则表达式中为了匹配/需要写成////
 }
 public static void startPosix(){
  //POSIX 字符类(仅 US-ASCII),运行于unix的一套标准
 }
 public static void startBorder(){
  //边界匹配器
  p("hello xie".matches("^h.*"));//以h开头,跟上0个或多个任意字符
  p("hello xie".matches(".*e$"));//0个或多个任意字符,最后以e结尾
  p("hello xie".matches("^h[a-z]{1,3}o//b.*"));// /b表示单词的边界,如空格,换行等
  p("helloxie".matches("^h[a-z]{1,3}o//b.*"));
 }
 public static void startWhiteLine(){
  //查找一篇文章中的空白字符
  p(" /n".matches("^[//s&&[^//n]]*//n$"));//以空白字符开头,这个空白字符不是换行符,同时这个空白符出现0次
  //或者多次,最后以换行符结尾
  p("amdk 84456m".matches(".*//d{5}."));
  p("amdk 84456m".matches(".*//b//d{5}."));
  p("amdk84456m".matches(".*//d{5}."));
  p("amdk84456m".matches(".*//b//d{5}."));
 }
 public static void startFind(){
  Pattern p=Pattern.compile("//d{3,5}");
  Matcher m=p.matcher("123-4521-555-6952-00");
  p(m.matches());//尝试将整个区域与模式匹配
  m.reset();//重置此具有新输入序列的匹配器
  p(m.find());//find()尝试查找与该模式匹配的输入序列的下一个子序列
  p(m.start()+"-"+m.end());//start() end()返回找到子串的位置
  p(m.find());
  p(m.start()+"-"+m.end());
  p(m.find());
  p(m.start()+"-"+m.end());
  p(m.find());
  p(m.start()+"-"+m.end());
  p(m.find());
  
  p(m.lookingAt());//lookingAt() 尝试将从区域开头开始的输入序列与该模式匹配
  p(m.lookingAt());
  p(m.lookingAt());
  p(m.lookingAt());
  p(m.lookingAt());
 }
 public static void startReplace(){
  Pattern p=Pattern.compile("java", Pattern.CASE_INSENSITIVE);//大小写不敏感
  Matcher m=p.matcher("java Java JAva I love Java More She hate JAVA my lover");
/*  while(m.find()){
   p(m.group());//返回由以前匹配操作所匹配的输入子序列
  }
*/
  //p(m.replaceAll("JAVA"));//将所有出现java的地方换成大写
  /**
   * 奇数次的java换成大写,而出现偶数次的java换成小写。
   */
  StringBuffer buf=new StringBuffer();
  int i=0;
  while (m.find()) {
   i++;
   if(i%2==0){
    m.appendReplacement(buf, "java");//将奇数次处的java换成大写JAVA,将出现偶数次处的java换成小写的java
   }else {
    m.appendReplacement(buf, "JAVA");
   }
  }
  m.appendTail(buf);//将后面的东西添加到buf
  p(buf);
 }
 public static void startGroup(){
  Pattern p=Pattern.compile("(//d{3,5})([a-z]{2})");//小括号表示分组,在正则表达式中,整个表达式是一个组,序号为0,
  //第一个左括号是第一组
  Matcher m=p.matcher("125bb-41247mc-4565dm-21bcs");
  while (m.find()) {
   p(m.group());
   p(m.group(0));
   p(m.group(1));
   p(m.group(2));
   
  }
 }
 /**
  * 找到一个文件中所有email并在后台打印出来
  */
 public static void emailSpilder(){
  try {
   BufferedReader br=new BufferedReader(new FileReader("D://project//javaregex//src//com//xie//regexexpression//email.htm"));
   String line=null;
   while ((line=br.readLine())!=null) {
    Parse(line);
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
    /**
     * 用正则表达式匹配电子邮件
     * @param line
     */
 private static void Parse(String line) {
  Pattern p=Pattern.compile("[//w[.-]]+@[//w[.-]]+//.[//w[.-]]{3,8}", Pattern.CASE_INSENSITIVE);
  Matcher m=p.matcher(line);
  while (m.find()) {
   p(m.group());
  }
 }

 public static void count(){
  BufferedReader br=null;
  boolean b=false;
  try {
   br=new BufferedReader(new FileReader("D://project//javaregex//src//com//xie//regexexpression//Regex.java"));
   String line=null;
   while ((line=br.readLine())!=null) {
    
                   line=line.trim();
                   if (line.matches("")) {
     whiteNum++;
       }else if (line.matches("^[//w|[}]].*")) {
     codeNum++;
    }else if(line.startsWith("/*")&&!line.endsWith("*/")){
     commentNum++;
     b=true;
    }else if (b) {
     commentNum++;
     if (line.endsWith("*/")) {
      b=false;
     }
    }else if (line.matches("^//.*")) {
     commentNum++;
    }
                   if (line.matches("^[a-z]//b*.*//.*")) {
     commentNum++;
     codeNum++;
    }              
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
             try {
    if (br!=null) {
     br.close();
     br=null;
    }
   } catch (Exception e2) {
    e2.printStackTrace();
   }
  }
  p(whiteNum);
  p(codeNum);
  p(commentNum);
 }
 
 

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐