`

java正则表达式

    博客分类:
  • Java
阅读更多
Scanner与正则表达式运用
import java.util.regex.*;
import java.util.*;
public class ThreatAnalyzer {
	static String threatData =
	    "58.27.82.161@02/10/2005\n" +
	    "204.45.234.40@02/11/2005\n" +
	    "58.27.82.161@02/11/2005\n" +
	    "58.27.82.161@02/12/2005\n" +
	    "58.27.82.161@02/12/2005\n" +
	    "[Next log section with different data format]";
  
	public static void main(String[] args) {
		Scanner sc = new Scanner(threatData);
		String pattern = "(\\d+[.]\\d+[.]\\d+[.]\\d+)@(\\d{2}/\\d{2}/\\d{4})";
		while (sc.hasNext(pattern)) {
			sc.next(pattern);
			MatchResult match = sc.match();
			String ip = match.group(1);
			String date = match.group(2);
			System.out.printf("Threat on %s from %s\n", ip, date);
			// Threat on 02/10/2005 from 58.27.82.161
		}
	}
} /* Output:
Threat on 02/10/2005 from 58.27.82.161
Threat on 02/11/2005 from 204.45.234.40
Threat on 02/11/2005 from 58.27.82.161
Threat on 02/12/2005 from 58.27.82.161
Threat on 02/12/2005 from 58.27.82.161



自定义Scanner的分割符,默认是空白
import java.util.*;
public class ScannerDelimiter {
  public static void main(String[] args) {
    Scanner scanner = new Scanner("12, 42, 78, 99, 42");
    scanner.useDelimiter("\\s*,\\s*");
    while(scanner.hasNextInt())
      System.out.println(scanner.nextInt());
  }
} /* Output:
12
42
78
99
42



//简单认识正则表达式的概念
	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
	Pattern p = Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
	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)"));
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics