1、正则表达式的基本使用范例
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
//简单认识正则表达式的概念
p( "abc".matches( "..."));
p( "a8729a".replaceAll( "\\d", "-"));
Pattern p = Pattern.compile( "[a-z]{3}");
Matcher m = p.matcher( "fgh");
p(m.matches());
p( "fgha".matches( "[a-z]{3}"));
//初步认识. * + ?
p( "a".matches( "."));
p( "aa".matches( "aa"));
p( "aaaa".matches( "a*"));
p( "aaaa".matches( "a+"));
p( "".matches("a*"));
p( "aaaa".matches( "a?"));
p( "".matches("a?"));
p( "a".matches( "a?"));
p( "214523145234532".matches( "\\d{3,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( "a".matches( "[abc]"));
p( "a".matches( "[^abc]"));
p( "A".matches( "[a-zA-Z]"));
p( "A".matches( "[a-z]|[A-Z]"));
p( "A".matches( "[a-z[A-Z]]"));
p( "R".matches( "[A-Z&&[RFG]]"));
//认识\s \w \d \
p( " \n\r\t".matches( "\\s{4}"));
p( " ".matches( "\\S"));
p( "a_8".matches( "\\w{3}"));
p( "abc888&^%".matches( "[a-z]{1,3}\\d+[&^#%]+"));
p( "\\".matches("\\\\"));
//POSIX Style
//p("a".matches("\\p{Lower}"));
//boundary
p( "hello sir".matches( "^h.*"));
p( "hello sir".matches( ".*ir$"));
p( "hello sir".matches( "^h[a-z]{1,3}o\\b.*"));
p( "hellosir".matches( "^h[a-z]{1,3}o\\b.*"));
//whilte lines
p( " \n".matches( "^[\\s&&[^\\n]]*\\n$"));
p( "aaa 8888c".matches( ".*\\d{4}."));
p( "aaa 8888c".matches( ".*\\b\\d{4}."));
p( "aaa8888c".matches( ".*\\d{4}."));
p( "aaa8888c".matches( ".*\\b\\d{4}."));
//email
p( "asdfasdfsafsf@dsdfsdf.com".matches( "[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));
//matches find lookingAt
/*Pattern p = Pattern.compile("\\d{3,5}");
String s = "123-34345-234-00";
Matcher m = p.matcher(s);
p(m.matches());
m.reset();
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.start() + "-" + m.end());
p(m.lookingAt());
p(m.lookingAt());
p(m.lookingAt());
p(m.lookingAt());*/
//replacement
/*
Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
StringBuffer buf = new StringBuffer();
int i=0;
while(m.find()) {
i++;
if(i%2 == 0) {
m.appendReplacement(buf, "java");
} else {
m.appendReplacement(buf, "JAVA");
}
}
m.appendTail(buf);
p(buf);
*/
//group
/*
Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");
String s = "123aa-34345bb-234cc-00";
Matcher m = p.matcher(s);
while(m.find()) {
p(m.group());
}
*/
//qulifiers
/*
Pattern p = Pattern.compile(".{3,10}+[0-9]");
String s = "aaaa5bbbb68";
Matcher m = p.matcher(s);
if(m.find())
p(m.start() + "-" + m.end());
else
p("not match!");
*/
//non-capturing groups
/*
Pattern p = Pattern.compile(".{3}(?=a)");
String s = "444a66b";
Matcher m = p.matcher(s);
while(m.find()) {
p(m.group());
}
*/
//back refenrences
/*
Pattern p = Pattern.compile("(\\d(\\d))\\2");
String s = "122";
Matcher m = p.matcher(s);
p(m.matches());
*/
//flags的简写
//Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
p( "Java".matches( "(?i)(java)"));
}
public static void p(Object o) {
System.out.println(o);
}
}
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
//简单认识正则表达式的概念
p( "abc".matches( "..."));
p( "a8729a".replaceAll( "\\d", "-"));
Pattern p = Pattern.compile( "[a-z]{3}");
Matcher m = p.matcher( "fgh");
p(m.matches());
p( "fgha".matches( "[a-z]{3}"));
//初步认识. * + ?
p( "a".matches( "."));
p( "aa".matches( "aa"));
p( "aaaa".matches( "a*"));
p( "aaaa".matches( "a+"));
p( "".matches("a*"));
p( "aaaa".matches( "a?"));
p( "".matches("a?"));
p( "a".matches( "a?"));
p( "214523145234532".matches( "\\d{3,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( "a".matches( "[abc]"));
p( "a".matches( "[^abc]"));
p( "A".matches( "[a-zA-Z]"));
p( "A".matches( "[a-z]|[A-Z]"));
p( "A".matches( "[a-z[A-Z]]"));
p( "R".matches( "[A-Z&&[RFG]]"));
//认识\s \w \d \
p( " \n\r\t".matches( "\\s{4}"));
p( " ".matches( "\\S"));
p( "a_8".matches( "\\w{3}"));
p( "abc888&^%".matches( "[a-z]{1,3}\\d+[&^#%]+"));
p( "\\".matches("\\\\"));
//POSIX Style
//p("a".matches("\\p{Lower}"));
//boundary
p( "hello sir".matches( "^h.*"));
p( "hello sir".matches( ".*ir$"));
p( "hello sir".matches( "^h[a-z]{1,3}o\\b.*"));
p( "hellosir".matches( "^h[a-z]{1,3}o\\b.*"));
//whilte lines
p( " \n".matches( "^[\\s&&[^\\n]]*\\n$"));
p( "aaa 8888c".matches( ".*\\d{4}."));
p( "aaa 8888c".matches( ".*\\b\\d{4}."));
p( "aaa8888c".matches( ".*\\d{4}."));
p( "aaa8888c".matches( ".*\\b\\d{4}."));
p( "asdfasdfsafsf@dsdfsdf.com".matches( "[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));
//matches find lookingAt
/*Pattern p = Pattern.compile("\\d{3,5}");
String s = "123-34345-234-00";
Matcher m = p.matcher(s);
p(m.matches());
m.reset();
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.start() + "-" + m.end());
p(m.lookingAt());
p(m.lookingAt());
p(m.lookingAt());
p(m.lookingAt());*/
//replacement
/*
Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
StringBuffer buf = new StringBuffer();
int i=0;
while(m.find()) {
i++;
if(i%2 == 0) {
m.appendReplacement(buf, "java");
} else {
m.appendReplacement(buf, "JAVA");
}
}
m.appendTail(buf);
p(buf);
*/
//group
/*
Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");
String s = "123aa-34345bb-234cc-00";
Matcher m = p.matcher(s);
while(m.find()) {
p(m.group());
}
*/
//qulifiers
/*
Pattern p = Pattern.compile(".{3,10}+[0-9]");
String s = "aaaa5bbbb68";
Matcher m = p.matcher(s);
if(m.find())
p(m.start() + "-" + m.end());
else
p("not match!");
*/
//non-capturing groups
/*
Pattern p = Pattern.compile(".{3}(?=a)");
String s = "444a66b";
Matcher m = p.matcher(s);
while(m.find()) {
p(m.group());
}
*/
//back refenrences
/*
Pattern p = Pattern.compile("(\\d(\\d))\\2");
String s = "122";
Matcher m = p.matcher(s);
p(m.matches());
*/
//flags的简写
//Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
p( "Java".matches( "(?i)(java)"));
}
public static void p(Object o) {
System.out.println(o);
}
}
2、正则表达式的应用
(1)代码行统计
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class CodeCounter {
static long normalLines = 0;
static long commentLines = 0;
static long whiteLines = 0;
public static void main(String[] args) {
File f = new File( "D:\\share\\JavaProjects\\TankWar1.9.11\\src");
File[] codeFiles = f.listFiles();
for(File child : codeFiles){
if(child.getName().matches( ".*\\.java$")) {
parse(child);
}
}
System.out.println( "normalLines:" + normalLines);
System.out.println( "commentLines:" + commentLines);
System.out.println( "whiteLines:" + whiteLines);
}
private static void parse(File f) {
BufferedReader br = null;
boolean comment = false;
try {
br = new BufferedReader( new FileReader(f));
String line = "";
while((line = br.readLine()) != null) {
line = line.trim();
if(line.matches( "^[\\s&&[^\\n]]*$")) {
whiteLines ++;
} else if (line.startsWith( "/*") && !line.endsWith("*/")) {
commentLines ++;
comment = true;
} else if (line.startsWith( "/*") && line.endsWith("*/")) {
commentLines ++;
} else if ( true == comment) {
commentLines ++;
if(line.endsWith( "*/")) {
comment = false;
}
} else if (line.startsWith( "//")) {
commentLines ++;
} else {
normalLines ++;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(br != null) {
try {
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class CodeCounter {
static long normalLines = 0;
static long commentLines = 0;
static long whiteLines = 0;
public static void main(String[] args) {
File f = new File( "D:\\share\\JavaProjects\\TankWar1.9.11\\src");
File[] codeFiles = f.listFiles();
for(File child : codeFiles){
if(child.getName().matches( ".*\\.java$")) {
parse(child);
}
}
System.out.println( "normalLines:" + normalLines);
System.out.println( "commentLines:" + commentLines);
System.out.println( "whiteLines:" + whiteLines);
}
private static void parse(File f) {
BufferedReader br = null;
boolean comment = false;
try {
br = new BufferedReader( new FileReader(f));
String line = "";
while((line = br.readLine()) != null) {
line = line.trim();
if(line.matches( "^[\\s&&[^\\n]]*$")) {
whiteLines ++;
} else if (line.startsWith( "/*") && !line.endsWith("*/")) {
commentLines ++;
comment = true;
} else if (line.startsWith( "/*") && line.endsWith("*/")) {
commentLines ++;
} else if ( true == comment) {
commentLines ++;
if(line.endsWith( "*/")) {
comment = false;
}
} else if (line.startsWith( "//")) {
commentLines ++;
} else {
normalLines ++;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(br != null) {
try {
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
(2)邮件匹配
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 EmailSpider {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader( new FileReader( "D:\\share\\courseware\\1043633.html"));
String line = "";
while((line=br.readLine()) != null) {
parse(line);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void parse(String line) {
Pattern p = Pattern.compile( "[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
Matcher m = p.matcher(line);
while(m.find()) {
System.out.println(m.group());
}
}
}
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailSpider {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader( new FileReader( "D:\\share\\courseware\\1043633.html"));
String line = "";
while((line=br.readLine()) != null) {
parse(line);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void parse(String line) {
Pattern p = Pattern.compile( "[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
Matcher m = p.matcher(line);
while(m.find()) {
System.out.println(m.group());
}
}
}
正则表达式对字符串的匹配功能很强大,使用得当将节省大量的时间
========================================================================
1、特殊字符处理
双引号'"':\"
"\\s"
"\\w"
2、
public static final String FILE_REQUIRE_ABSOLUTE = "^[\\s]*/[/*]+[\\s]*#require[\\s]+<([\\w/.-]+)>+[\\s]*$";
public static final String FILE_REQUIRE_RELATIVE = "^[\\s]*/[/*]+[\\s]*#require[\\s]+\"([\\w/.-]+)\"+[\\s]*$";
本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/383910,如需转载请自行联系原作者