Feb 17, 2009

正则表达式(Regular Expression)测试程序

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


public class RegExp {
  public static void main(String[] args) {
  /* p("abc".matches("..."));//可以匹配,一个点代表一个字符
    p("a8729a".replaceAll("\\d", "-"));//把数字全替换为横线,\\d代表一位数字
    Pattern p = Pattern.compile("[a-z]{3}");//匹配三个字符,每个都是a-z
    Matcher m = p.matcher("fgh");
    p(m.matches());*/
    // p("fgh".matches("[a-z]{3}"));//上边三句可合并为这一句

  /**Greedy quantifiers 贪婪限定符,默认
    * 初步认识 . * + ?即meta characters
    * . 一个字符
    * ? 一个或零个
    * * 零个或多个
    * + 一个或多个
    * [n] 正好n个
    * [n,]最少n个
    * [n,m]至少n个最多m个
    */
    /* p("a".matches("."));
    p("aaaa".matches("a*"));
    p("aaaa".matches("a+"));
    p("aaaa".matches("a?"));
    p("".matches("a*"));//零宽度匹配 zero length matches。空串匹配
    p("".matches("a?"));
    p("".matches("a+"));
    p("1231231425346234".matches("\\d{3,100}"));//至少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]]"));//交集,取A-Z与RFG集合交集的部分,其实就是RFG
    */

    /**
      *\d digit
      *\D non-digit
      *\s a whitespace character:如[ \t\n\x0B\f\r] 不可见的符号
      *\S a non-whitespace character
      *\w a word character: [a-zA-Z_0-9]包括下划线
      *\W a non-word character
      */
    /*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 (Portable Operating System Interface based on uniX)
      * 以 unix 操作系统为基础的可携带操作系统界面
      * 以 unix 操作系统为基础的操作系统标准
      */
    /*p("a".matches("\\p{Lower}"));//很少这样写,不推荐
      */

    /**
      * boundary 边界匹配
      * ^位于中括号里代表取反,在中括号外代表一行的起始位置
      * $结尾
      * \b word boundary
      * \B non-word 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$【末尾跟着换行符】"));
    // " \n"即一个空白行
      */
}

  public static void p(Object o) {
    System.out.println(o);
  }
}

No comments:

Powered By Blogger