简介
Jakarta-ORO是最全面以及优化得最好的正则表达式API之一,Jakarta-ORO库以前叫做OROMatcher,是由DanIEl F. Savarese编写,后来他赠给Jakarta Project。
Jakarta-ORO正则表达式库支持Perl5兼容的正则表达式语法。
环境 jdk1.5.0_12, jakarta-oro-2.0.8
源码 打印 ? public static voID simpleContains() throws Exception { Pattern pattern = new Perl5Compiler().compile( "//d+" ); Perl5Matcher matcher = new Perl5Matcher(); PatternMatcherinput matcherinput = new PatternMatcherinput( "北京2008年8月08日20时"); while (matcher.contains(matcherinput, pattern)) { MatchResult result = matcher.getmatch(); System.out.println(result.toString()); } }
输出:
2008
8
08
20
voID simpleResults() new Perl5Compiler().compile( "(//d+//.//d+//.//d+//.//d+)@(//d{2}///d{2}///d{4})" ); new PatternMatcherinput("202.108.9.38@08/10/2008" ); for ( int i = 0 ; i < result.groups(); i++) { System.out.printf("%s : %s/n" , i, result.group(i)); } }
输出:
0 : 202.108.9.38@08/10/2008
1 : 202.108.9.38
2 : 08/10/2008
voID spiltIt() String rawStr = "北京;朝阳;鸟巢奥运会场" ; ArrayList<String> results = new ArrayList<String>(); Perl5Matcher matcher = new Perl5Matcher(); Pattern pattern = new Perl5Compiler().compile( ";" ); Util.split(results, matcher, pattern, rawStr); for (String r : results) { System.out.println(r); } }
输出:
北京
朝阳
鸟巢奥运会场
替换:
voID substituteIt() String rawStr = "2008-08-11 17:16:32" ; new Perl5Compiler().compile( "-" ); String result = Util.substitute(matcher, new Perl5Substitution( ","), rawStr, Util.SUBSTITUTE_ALL); System.out.println(result); 输出:
2008,08,11 17:16:32
替换2:
voID substituteIt2() new Perl5Compiler().compile( "(//d{4})-(//d{2})-(//d{2}) (//d{2}://d{2}://d{2})" ); new Perl5Substitution( "变换 ,, " ),248); line-height:18px"> System.out.println("格式yyyy-MM-dd HH:mm:ss到dd,MM,yyyy HH:mm:ss" ); System.out.println(result); } 输出:
格式yyyy-MM-dd HH:mm:ss到dd,yyyy HH:mm:ss
变换 11,2008 17:16:32
小结:
上面的几种用法看起来要比java.util.regex包用着要复杂,如果是简单应用的话还是用自带的包省力。
下面几种用法是Perl5格式用法,如果习惯这种格式,用起来还是比较爽的。
Perl5Util查找格式:
[ m ] / pattern / [ i ][ m ][ s ][ x ]
第一个m写不写都可以(The m prefix is optional)
i 忽略大小写(case insensitive match)
m 多行模式(treat the input as consisting of multiple lines)
s 单行模式(treat the input as consisting of a single line)
x 使用扩展语法 (enable extended Expression Syntax)
查找 MyDoc/Java/SimpleJava 时
正常写法 "m/MyDoc///Java///SimpleJava/"
扩展写法 "m#MyDoc/Java/SimpleJava#x"
Perl5Util查找:
2008
8
08
20
分组:
voID perl5Match2() { new PatternMatcherinput("202.108.9.38@08/10/2008" ); while (plUtil.match( "m#08(/10/)2008#x" ,248); line-height:18px"> System.out.printf("%s : %s/n" , 0 , result.group( 0 )); System.out.printf("%s : %s/n" ,0); background-color:inherit">1 ,0); background-color:inherit">1 )); }
输出:
0 : 08/10/2008
1 : /10/
Perl5Util替换格式:
s / pattern / replacement / [ g ][ i ][ m ][ o ][ s ][ x ]
第一个s必须要写(The s prefix is mandatory)
g 全部替换。默认只替换第一个
i 忽略大小写(case insensitive match)
m 多行模式(treat the input as consisting of multiple lines)
o 只替换第一个(吾不确认)
s 单行模式(treat the input as consisting of a single line)
x 使用扩展语法 (enable extended Expression Syntax)
Perl5Util替换:
voID perl5Substitute2() String result = plutil.substitute("s/(//d{4})-(//d{2})-(//d{2}) (//d{2}://d{2}://d{2})/变换 , /g" ,108); color:inherit; line-height:18px"> System.out.println("格式yyyy-MM-dd HH:mm:ss到dd,yyyy HH:mm:ss" ); }
输出:
格式yyyy-MM-dd HH:mm:ss到dd,2008 17:16:32
Perl5Util替换3:
输出:
314159,265
314,159,265
过滤:
voID filter() {
String path = "D://MyDoc//Java//SimpleJava" ; file file = new file(path); String[] globList = file.List(new GlobfilenameFilter( "*.java" )); for (String fn : globList) { System.out.println(fn); String[] perl5List = file.List(new Perl5filenameFilter( ".+//.java" )); for (String fn : perl5List) { }输出:
DepCreater.java
ReadAnDWrite.java
DepCreater.java
ReadAnDWrite.java
模式匹配的几个问题:
表达式的递归匹配
用正则表达式来分析一个计算式中的括号配对情况,想办法把有嵌套的的成对括号或者成对标签匹配出来。
非贪婪匹配的效率
当一个表达式中,有多个非贪婪匹配时,或者多个未知匹配次数的表达式时,这个表达式将可能存在效率上的陷阱。有时候,匹配速度非常慢。(简单避开方法表达式使用不超过一个非贪婪)
相关网站:
@R_502_6822@://www.oschina.net/bbs/thread/10601?lp=8 @R_502_6822@://xzio.javaeye.com/blog/121291 @R_502_6822@://www.zeuux.org/scIEnce/learning-regex.cn.HTML @R_502_6822@://blog.csdn.net/yuanchao3333/archive/2009/01/31/3855418.aspx @R_502_6822@://www.360doc.com/content/10/0805/09/561_43777969.sHTML @R_502_6822@://www.51testing.com/HTML/26/122326-215574.HTML
总结以上是内存溢出为你收集整理的如何使用Jakarta-ORO库全部内容,希望文章能够帮你解决如何使用Jakarta-ORO库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)