Jakarta-ORO正则表达式的运用

来源:互联网 发布:mysql的case语句 编辑:程序博客网 时间:2024/05/29 21:28

Jakarta-ORO是一个正则表达式库,它是最全面的正则表达式API之一,而且它与Perl 5和awk正则表达式完全兼容。

首先介绍使用Jakarta-ORO必须创建和访问的对象,然后介绍API。

  • PatternCompiler对象

       首先,创建一个Perl5Compiler类的实例,并把它赋值给PatternCompiler接口对象。Perl5Compiler是PatternCompiler接口的一个实现,允许你把正则表达式编译成用来匹配的Pattern对象。

PatternCompiler compiler = new Perl5Compiler();  

  • Pattern对象

要把正则表达式编译成Pattern对象,调用compiler对象的compile()方法,并在调用参数中指定正则表达式。例如,你可以按照下面这种方式编译正则表达式“t[ie]o”:

              try {      pattern=compiler.compile("t[ie]o",Perl5Compiler.CASE_INSENSITIVE_MASK);      PatternMatcher matcher = new Perl5Matcher();      System.out.println("contains:"+matcher.contains("tio00", pattern));      System.out.println("contains:"+matcher.matchesPrefix("tio00", pattern));      System.out.println("contains:"+matcher.matches("tio00", pattern));  } catch (MalformedPatternException e) {      e.printStackTrace();  }  

默认情况下,编译器创建一个大小写敏感的模式(pattern)。因此,上面代码编译得到的模式只匹配“tio”、“teo“,但不匹配“Tio”和“TiO”。要创建一个大小写不敏感的模式,你应该在调用编译器的时候指定一个额外的参数,如上面Perl5Compiler.CASE_INSENSITIVE_MASK.

创建好Pattern对象之后,你就可以通过PatternMatcher类用该Pattern对象进行模式匹配。

  • PatternMatcher对象

PatternMatcher对象根据Pattern对象和字符串进行匹配检查。你要实例化一个Perl5Matcher类并把结果赋值给PatternMatcher接口。Perl5Matcher类是PatternMatcher接口的一个实现,它根据Perl 5正则表达式语法进行模式匹配:

PatternMatcher matcher = new Perl5Matcher();  

使用PatternMatcher对象,你可以用多个方法进行匹配操作,这些方法的第一个参数都是需要根据正则表达式进行匹配的字符串:

boolean matches(String input, Pattern pattern):当输入字符串和正则表达式要精确匹配时使用。换句话说,正则表达式必须完整地描述输入字符串。

boolean matchesPrefix(String input, Pattern pattern):当正则表达式匹配输入字符串起始部分时使用。
boolean contains(String input, Pattern pattern):当正则表达式要匹配输入字符串的一部分时使用(即,它必须是一个子串)。

另外,在上面三个方法调用中,你还可以用PatternMatcherInput对象作为参数替代String对象;这时,你可以从字符串中最后一次匹配的位置开始继续进行匹配。当字符串可能有多个子串匹配给定的正则表达式时,用PatternMatcherInput对象作为参数就很有用了。用PatternMatcherInput对象作为参数替代String时,上述三个方法的语法如下:

boolean matches(PatternMatcherInput input, Pattern pattern)   boolean matchesPrefix(PatternMatcherInput input, Pattern pattern)   boolean contains(PatternMatcherInput input, Pattern pattern)   PatternCompiler compiler = new Perl5Compiler();          Pattern pattern = null;          try {              pattern=compiler.compile("t[ie]o",Perl5Compiler.CASE_INSENSITIVE_MASK);              PatternMatcher matcher = new Perl5Matcher();              PatternMatcherInput input = new PatternMatcherInput("tiotiotettio");              while (matcher.contains(input, pattern)) {                  MatchResult result = matcher.getMatch();                                      //do something                  System.out.println("Match: " + result.toString());                  System.out.println("Length: " + result.length());                  int groups = result.groups();                  System.out.println("Groups: " + groups);                  System.out.println("Begin offset: " + result.beginOffset(0));                  System.out.println("End offset: " + result.endOffset(0));                  System.out.println("Saved Groups: ");                    // Start at 1 because we just printed out group 0                  for(int group = 1; group < groups; group++) {                      System.out.println(group + ": " + result.group(group));                      System.out.println("Begin: " + result.begin(group));                      System.out.println("End: " + result.end(group));                  }                  }              //我们想从头再来搜索              input.setCurrentOffset(input.getBeginOffset());                            //如果我们想使用例外一个字符串搜索,没有必要重新创建一个PatternMatcherInput对象,只要重新给input              //传递一个新的字符串就行了              input.setInput("anewstring");            } catch (MalformedPatternException e) {              e.printStackTrace();          }  

下面介绍一下oro的正则替换
PatternCompiler compiler = new Perl5Compiler();          Pattern pattern = null;          try {              pattern=compiler.compile("e(0)",Perl5Compiler.CASE_INSENSITIVE_MASK);              PatternMatcher matcher = new Perl5Matcher();                            String result = Util.substitute(matcher, pattern, new Perl5Substitution("dfrgrw$1"), "e0");              System.out.println(result);          } catch (MalformedPatternException e) {              e.printStackTrace();          }  


http://blog.csdn.net/cdqliweiwei/article/details/6618522
原创粉丝点击