[SXT][MSB]正则表达式总结

xiaoxiao2026-06-06  11

 

http://www.cjsdn.net/Doc/JDK50/java/util/regex/Pattern.html

 

package test.regularExp;

import java.util.regex.Matcher;import java.util.regex.Pattern;

public class Test {

 public static void main(String[] args) {    // ==== 简单认识正则表达式的概念 ====  /*p("abc".matches("..."));  p("a13123b".replaceAll("\\d", "-"));  // \d表示 一个数字  Pattern p = Pattern.compile("[a-z]{3}");  Matcher m = p.matcher("fgh");  p(m.matches());  p("fghj".matches("[a-z]{3}"));*/    // ==== 初步认识 . * + ? ====  /*   * Greedy 数量词    X?   X,一次或一次也没有    X*   X,零次或多次    X+   X,一次或多次    X{n}   X,恰好 n 次    X{n,}   X,至少 n 次    X{n,m}   X,至少 n 次,但是不超过 m 次    */  /*p("a".matches(".")); // .表示 任意一个字符  p("aa".matches("aa"));   p("aaaa".matches("a*")); // *表示 0个多个或  p("aaaa".matches("a+")); // +表示 1个或多个  p("aaaa".matches("a?")); // ?表示 0个或1个  p("".matches("a?"));  p("236152352345".matches("\\d{3,100}")); // {3,100}表示 长度是3到100  p("192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\{1,3}"));  p("192".matches("[0-2][0-9][0-9]"));*/    // ==== 范围 ====  /*   * 字符类    [abc] a、b 或 c(简单类)    [^abc] 任何字符,除了 a、b 或 c(否定)    [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)    [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)    [a-z&&[def]] d、e 或 f(交集)    [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)    [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)    */  /*p("a".matches("[abc]"));  p("a".matches("[^abc]")); // ^表示 除了abc之外的字符  p("a".matches("[a-zA-Z]"));  p("a".matches("[a-z]|[A-Z]")); // a-z OR A-Z  p("a".matches("[a-z[A-Z]]")); // a-z OR A-Z  p("a".matches("[A-Z&&[RFG]]")); // A-Z AND RFG中的三者之一*/    // ==== 认识 \s \w \d \ ====  /*   *  预定义字符类    . 任何字符(与行结束符可能匹配也可能不匹配)    \d 数字:[0-9]    \D 非数字: [^0-9]    \s 空白字符:[ \t\n\x0B\f\r]    \S 非空白字符:[^\s]    \w 单词字符:[a-zA-Z_0-9]    \W 非单词字符:[^\w]    */  /*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 ====  /*   * POSIX 字符类(仅 US-ASCII)    \p{Lower} 小写字母字符:[a-z]    \p{Upper} 大写字母字符:[A-Z]    \p{ASCII} 所有 ASCII:[\x00-\x7F]    \p{Alpha} 字母字符:[\p{Lower}\p{Upper}]    \p{Digit} 十进制数字:[0-9]    \p{Alnum} 字母数字字符:[\p{Alpha}\p{Digit}]    \p{Punct} 标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~    \p{Graph} 可见字符:[\p{Alnum}\p{Punct}]    \p{Print} 可打印字符:[\p{Graph}\x20]    \p{Blank} 空格或制表符:[ \t]    \p{Cntrl} 控制字符:[\x00-\x1F\x7F]    \p{XDigit} 十六进制数字:[0-9a-fA-F]    \p{Space} 空白字符:[ \t\n\x0B\f\r]    */  //p("a".matches("\\p{Lower}"));    // ==== boundary ====  /*   * 边界匹配器    ^ 行的开头    $ 行的结尾    \b 单词边界    \B 非单词边界    \A 输入的开头    \G 上一个匹配的结尾    \Z 输入的结尾,仅用于最后的结束符(如果有的话)    \z 输入的结尾    */  /*p("hello sir".matches("^h.*"));  p("hello sir".matches(".*r$"));  p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));  p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));*/    // ==== white lines ====  //p("  \n".matches("^[\\s&&[^\\n]]*\\n$"));    // ==== practise ====   /*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("adsfasdfasdf@afdads.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));    // ==== matches find lookingAt  start&end ====  /*Pattern p = Pattern.compile("\\d{3,5}");  String s = "123-34343-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());*/    // ==== string replacement ====  /*Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);  Matcher m = p.matcher("java JAVa JAVA jaVa IlovejAVA youhateJaVa");  //p(m.replaceAll("JAVA"));  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.find());   p(m.group());   //p(m.group(1));   //p(m.group(2));  }*/    // ==== qulifiers ====  /*   * Greedy 数量词    X? X,一次或一次也没有    X* X,零次或多次    X+ X,一次或多次    X{n} X,恰好 n 次    X{n,} X,至少 n 次    X{n,m} X,至少 n 次,但是不超过 m 次      Reluctant 数量词    x?? X,一次或一次也没有    X*? X,零次或多次    X+? X,一次或多次    X{n}? X,恰好 n 次    X{n,}? X,至少 n 次    X{n,m}? X,至少 n 次,但是不超过 m 次      Possessive 数量词    X?+ X,一次或一次也没有    X*+ X,零次或多次    X++ X,一次或多次    X{n}+ X,恰好 n 次    X{n,}+ X,至少 n 次    X{n,m}+ X,至少 n 次,但是不超过 m 次   */  /*Pattern p = Pattern.compile(".{3,10}[0-9]");  //Pattern p = Pattern.compile(".{3,10}?[0-9]");  //Pattern p = Pattern.compile(".{3,10}+[0-9]");  String s = "aaaa5bbbb6";  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)");  //Pattern p = Pattern.compile(".{3}(?!a)");  //Pattern p = Pattern.compile("(?=a).{3}");  //Pattern p = Pattern.compile(".{3}(?<=a)");  String s = "444a66b";  Matcher m = p.matcher(s);  while (m.find()) {   p(m.group());  } }  public static void p(Object o) {  System.out.println(o); }}

 // ===== 抓取网页中的email地址 =====

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:\\1.txt"));   String line = "";   while((line=br.readLine()) != null) {    parse(line);   }  } catch (FileNotFoundException e) {   e.printStackTrace();  } catch (IOException e) {   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.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:\\code\\src\\");  File[] codeFiles = f.listFiles();  for (File child : codeFiles) {   if (child.getName().matches(".*\\.java$")) {    parse(child);   }  } }

 private static void parse(File f) {  BufferedReader br = null;  try {   br = new BufferedReader(new FileReader(f));   String line = "";   while((line = br.readLine()) != null) {    if ((line.matches("^[\\s&&[^\\n]]*\\n$"))) {     whiteLines++;    } else {         }   }  } catch (FileNotFoundException e) {   e.printStackTrace();  } catch (IOException e) {   e.printStackTrace();  } finally {   if (br != null) {    try {     br.close();     br = null;    } catch (IOException e) {     e.printStackTrace();    }   }  } }

}

转载请注明原文地址: https://www.6miu.com/read-5049694.html

最新回复(0)