JAVA 正则表达式陈广佳版本(超具体)(10)

由于事情的需要,本人常常要面临大量的文字电子资料的整理事情,因此曾对在JAVA中正则表达式的应用有所存眷,并对其有必然的相识,但愿通过本文与同行举办有关方面的心得交换。

正则表达式:
正则表达式是一种可以用于模式匹配和替换的强有力的东西,一个正则表达式就是由普通的字符(譬喻字符 a 到 z)以及非凡字符(称为元字符)构成的文字模式,它描写在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串举办匹配。

正则表达式在字符数据处理惩罚中起着很是重要的浸染,我们可以用正则表达式完成大部门的数据阐明处理惩罚事情,如:判定一个串是否是数字、是否是有效的Email地点,从海量的文字资料中提取有代价的数据等等,假如不利用正则表达式,那么实现的措施大概会很长,而且容易堕落。对这点本人深有体会,面临大量东西书电子档资料的整理事情,假如不分明应用正则表达式来处理惩罚,那么将是很疾苦的一件工作,反之则将可以轻松地完成,得到事半功倍的结果。

由于本文目标是要先容如安在JAVA里运用正则表达式,因此对刚打仗正则表达式的读者请参考有关资料,在此因篇幅有限不作先容。

JAVA对正则表达式的支持:
在JDK1.3或之前的JDK版本中并没有包括正则表达式库可供JAVA措施员利用,之前我们一般都在利用第三方提供的正则表达式库,这些第三方库中有源代码开放的,也有需付费购置的,而现时在JDK1.4的测试版中也已经包括有正则表达式库---java.util.regex。

故此此刻我们有许多面向JAVA的正则表达式库可供选择,以下我将先容两个较具代表性的 Jakarta-ORO和java.util.regex,首先虽然是本人一直在用的 Jakarta-ORO:

Jakarta-ORO正则表达式库

1.简介:

Jakarta-ORO是最全面以及优化得最好的正则表达式API之一,Jakarta-ORO库以前叫做OROMatcher,是由Daniel F. Savarese编写,厥后他将其赠与Jakarta Project,读者可在Apache.org的网站下载该API包。

很多源代码开放的正则表达式库都是支持Perl5兼容的正则表达式语法,Jakarta-ORO正则表达式库也不破例,他与Perl 5正则表达式完全兼容。

2.工具与其要领:

★PatternCompiler工具:
我们在利用Jakarta-ORO API包时,最先要做的是,建设一个Perl5Compiler类的实例,并把它赋值给PatternCompiler接口工具。Perl5Compiler是PatternCompiler接口的一个实现,答允你把正则表达式编译成用来匹配的Pattern工具。

PatternCompiler compiler=new Perl5Compiler();

★Pattern工具:
要把所对应的正则表达式编译成Pattern工具,需要挪用compiler工具的compile()要领,并在挪用参数中指定正则表达式。举个例子,你可以凭据下面这种方法编译正则表达式"s[ahkl]y":

Pattern pattern=null; try { pattern=compiler.compile("s[ahkl]y "); } catch (MalformedPatternException e) { e.printStackTrace(); }

在默认的环境下,编译器会建设一个对巨细写敏感的模式(pattern)。因此,上面代码编译获得的模式只匹配"say"、"shy"、 "sky"和"sly",但不匹配"Say"和"skY"。要建设一个巨细写不敏感的模式,你应该在挪用编译器的时候指定一个特另外参数:

pattern=compiler.compile("s[ahkl]y",Perl5Compiler.CASE_INSENSITIVE_MASK);

Pattern工具建设好之后,就可以通过PatternMatcher类用该Pattern工具举办模式匹配。

★PatternMatcher工具:

PatternMatcher工具依据Pattern工具和字符串展开匹配查抄。你要实例化一个Perl5Matcher类并把功效赋值给PatternMatcher接口。Perl5Matcher类是PatternMatcher接口的一个实现,它按照Perl 5正则表达式语法举办模式匹配:
PatternMatcher matcher=new Perl5Matcher();

PatternMatcher工具提供了多个要领举办匹配操纵,这些要领的第一个参数都是需要按照正则表达式举办匹配的字符串:

1、boolean matches(String input, Pattern pattern):当要求输入的字符串input和正则表达式pattern准确匹配时利用该要领。也就是说当正则表达式完整地描写输入字符串时返回真值。
2、boolean matchesPrefix(String input, Pattern pattern):要求正则表达式匹配输入字符串起始部门时利用该要领。也就是说当输入字符串的起始部门与正则表达式匹配时返回真值。
3、boolean contains(String input, Pattern pattern):当正则表达式要匹配输入字符串的一部门时利用该要领。当正则表达式为输入字符串的子串时返回真值。

但以上三种要领只会查找输入字符串中匹配正则表达式的第一个工具,假如当字符串大概有多个子串匹配给定的正则表达式时,那么你就可以在挪用上面三个要领时用PatternMatcherInput工具作为参数替代String工具,这样就可以从字符串中最后一次匹配的位置开始继承举办匹配,这样就利便的多了。

用PatternMatcherInput工具作为参数替代String时,上述三个要领的语法如下:

boolean matches(PatternMatcherInput input, Pattern pattern)

boolean matchesPrefix(PatternMatcherInput input, Pattern pattern)

boolean contains(PatternMatcherInput input, Pattern pattern)

★Util.substitute()要领:
查找后需要要举办替换,我们就要用到Util.substitute()要领,其语法如下:

public static String substitute(PatternMatcher matcher,
Pattern pattern,Substitution sub,String input,
int numSubs)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdxpw.html