Jakarta-ORO

来源:互联网 发布:手机隐形定位软件 编辑:程序博客网 时间:2024/05/20 02:30

 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 somethingSystem.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 0for(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();}


e0替换成dfrgrw0

这篇文章介绍了如何在Java程序中通过Jakarta-ORO库利用正则表达式

原创粉丝点击