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);
}
}
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);
}
}
相关文章推荐
- [Java] 正则表达式 02 EmailSpider 抓邮件, CodeCounter 统计程序有效代码行数
- [Java] 正则表达式 02 EmailSpider 抓邮件, CodeCounter 统计程序有效代码行数
- java简单统计.java文件中的有效代码行,空行,注释行
- JAVA语言用正则表达式抓取网页中的email
- java正则表达式简单使用和网页爬虫的制作代码
- Java正则表达式,抓取网页email地址实例
- Java正则表达式,抓取网页email地址实例
- 统计*.Java文件代码行数——正则表达式
- 正则表达式 统计java文件代码的数量
- 利用正则表达式统计代码中的(代码行数,注释行数,空白行数)利用正则表达式获取一个网页中所有的邮箱地址
- JAVA学习正则表达式提取email
- 黑马程序员——JAVA基础---正则表达式---概述,匹配、切割、替换、提取,网页爬虫
- vs2005用正则表达式统计有效代码行数
- java网页正则表达式爬虫(用纯java代码在相应的网页中查看自己想要的内容)
- 利用正则表达式获取特定文件(如java class)并对其进行处理(如代码统计)
- java学习-- 使用正则表达式从网页上提取网站标题
- java中正则表达式提取字符串中日期实现代码
- 经常用到的提取手机、电话、Email联系方式的几个java正则表达式
- java正则表达式的使用1 通过正则表达式抓取网页中的email
- Java正则表达式提取网页url和链接文字【2008年4月19日最新修改】