正则表达式 -- java

来源:互联网 发布:mac u盘装win7 编辑:程序博客网 时间:2024/06/05 05:51

1 java 中的证则表达式     

http://www.javaresearch.org/article/31233.htm

http://bbs.pfan.cn/post-290605.html


1.1 定义

   正则表达式(Regular Expression)是一种生成字符串的字符串。晕吧。比如说,String regEx="me+";这里字符串me+能够生成的字符串是:me、mee、meee、meeeeeeeeee等等,一个正则表达式可能生成无穷的字符串,所以我们不可能(有必要吗?)输出正则表达式产生的所有东西。
反过来考虑,对于字符串:me、mee、meee、meeeeeeeeee等等,我们能否有一种语言去描述它们呢?显然,正则表达式语言是这种语言,它是一些字符串的模式??简洁而深刻的描述。


1.2 常用功能实例

  1. import java.util.regex.*;
  2. public class MatcherTest {
  3.     // 如果想在查找时忽略大小写,则可以写成Pattern
  4.     // p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);
  5.     public static void main(String[] args) throws Exception {
  6.         // example 1
  7.         String regEx = ".+////(.+)$";
  8.         String str = "c://dir1//dir2//name.txt";
  9.         Pattern p = Pattern.compile(regEx);
  10.         Matcher m = p.matcher(str);
  11.         m.find();
  12.         for (int i = 1; i <= m.groupCount(); i++) {
  13.             System.out.println(m.group(i));
  14.         }
  15.         System.out.println("");
  16.         System.out.println("");
  17.         System.out.println("==========================================");
  18.         System.out.println("      判断某个字符串是否  符合   正则表达式      ");
  19.         System.out.println("==========================================");
  20.         System.out.println("中文".matches("[//u4e00-//u9fa5]+"));
  21.         System.out.println("ab".matches("[//u4e00-//u9fa5]+"));
  22.         System.out.println("中2文".matches("[//u4e00-//u9fa5]+"));
  23.         System.out.println("ab".matches("[//u4e00-//u9fa5]"));
  24.         System.out.println("中2文".matches("[//u4e00-//u9fa5]"));
  25.         System.out.println("中文".matches("[//u4e00-//u9fa5]"));
  26.         System.out.println("");
  27.         System.out.println("");
  28.         System.out.println("==========================================");
  29.         System.out.println("   判断某个字符串是否  包含子字符串   正则表达式  ");
  30.         System.out.println("==========================================");
  31.         regEx = "[//u4e00-//u9fa5]";
  32.         str = "c://dir1//dir2//name.txt中文";
  33.         p = Pattern.compile(regEx);
  34.         m = p.matcher(str);
  35.         System.out.println(m.find());
  36.         System.out.println("");
  37.         System.out.println("");
  38.         System.out.println("==========================================");
  39.         System.out.println("        查找所有符合正则表达式的子字符串         ");
  40.         System.out.println("       (//d)(?=a)     表示a的前一位数字       ");
  41.         System.out.println("==========================================");
  42.         String candidate = "A M1atcher ex2amines the results of 3applying 4a p53attern.";
  43.         String regex = "(//d)(?=a)";
  44.         p = Pattern.compile(regex);
  45.         m = p.matcher(candidate);
  46.         String val = null;
  47.         System.out.println("INPUT: " + candidate);
  48.         System.out.println("REGEX: " + regex + "/r/n");
  49.         while (m.find()) {
  50.             val = m.group();
  51.             System.out.println("MATCH: " + val);
  52.         }
  53.         System.out.println("");
  54.         System.out.println("");
  55.         System.out.println("");
  56.         System.out.println("==========================================");
  57.         System.out
  58.                 .println("            根据这则表达式 分割 字符串      等效于   String[] r = /"xd::abc::cde/".split(/"::/");      ");
  59.         System.out.println("==========================================");
  60.         regEx = "::";
  61.         str = "xd::abc::cde";
  62.         p = Pattern.compile(regEx);
  63.         System.out.println("INPUT: " + str);
  64.         System.out.println("REGEX: " + regEx + "/r/n");
  65.         String[] r = p.split(str);
  66.         for (int i = 0; i < r.length; i++) {
  67.             System.out.println("r[" + i + "] is " + r[i]);
  68.         }
  69.         System.out.println("");
  70.         System.out.println("");
  71.         System.out.println("");
  72.         System.out.println("");
  73.         System.out.println("==========================================");
  74.         System.out.println("            根据正则表达式替换字符串            ");
  75.         System.out.println("==========================================");
  76.         regEx = "a+"// 表示一个或多个a
  77.         str = "aaabbced a ccdeaa";
  78.         p = Pattern.compile(regEx);
  79.         m = p.matcher(str);
  80.         String s = m.replaceAll("A");
  81.         System.out.println("INPUT: " + str);
  82.         System.out.println("REGEX: " + regEx + "/r/n");
  83.         System.out.println(s);
  84.         // 如果写成空串,既可达到删除的功能,比如:
  85.         // String s=m.replaceAll("");
  86.         // 结果为"bbced ccde"
  87.     }
  88. }


1.3 扩展包  commons-validator.jar and   jakarta-oro.jar

    已经实现了一些常见字段的验证,如验证email,电话,中文,url等