JAVA 正则表达式陈广佳版本(超详细)

2020-03-05 18:01:51王振洲

Tank a123- 85 Tank a256- 32 Tank a78- 22

但是如果你把numInterpolations设为2,并且numSubs依然设为SUBSTITUTE_ALL,那么这时你获得的结果则会是:
Tank a123- 85 Tank a256- 32 Tank a256- 22

你要注意到最后一个替换所用变量$1所代表的内容与第二个$1一样为"256",而不是预期的"78",因为在替换进行中,替换变量$1只根据匹配内容进行了两次更新,最后一次就使第二次匹配时所更新的结果,那么我们可以由此知道,如果numInterpolations设为1,那么结果将是:
Tank a123- 85 Tank a123- 32 Tank a123- 22

3.应用示例:

刚好前段时间公司准备出一个《伊索预言》的英语学习互动教材,其中有电子档资料的整理工作,我们就以此为例来看一下Jakarta-ORO与JDBC2.0 API结合起来对数据库内的资料进行简单提取与整理的实现。假设由录入部的同事送过来的存放在MS SQLSERVER 7数据库里的电子档的表结构如下(注:或许在不同的DBMS中有相应的正则表达式的应用,但这不在本文讨论范围内):

表名:AESOP, 表中每条记录包含有三列:

ID(int):单词索引号
WORD(varchar):单词
CONTENT(varchar):存放单词的相关解释与例句等内容

其中CONTENT列中内容的格式如下:
[音标] [词性] (解释){(例句一/例句解释/例句中该词的词性: 单词在句中的意思) (例句二/例句解释/例句中该词的词性: 单词在句中的意思)}

如对应单词Kevin,CONTENT中的内容如下:
['kevin] [名词](人名凯文){(Kevin loves comic./凯文爱漫画/名词: 凯文)( Kevin is living in ZhuHai now./凯文现住在珠海/名词: 凯文)}

我们的例子主要针对CONTENT列中内容进行字符串处理。

★查找单个匹配:

首先,让我们尝试把CONTNET列中的[音标]字段的内容列示出来,由于所有单词的记录中都有这一项并且都在字串开始位置,所以这个查找工作比较简单:

1、确定相应的正则表达式:/[[^]]+/]
这个是很简单的正则表达式,其意思是要求相匹配的字符串必须为以一对中括号包含的所有内容,如['kevin] 、[名词]等,但内容中不包括"]"符号,也就是要避免出现"[][]"会作为一个匹配对象的情况出现(有关正则表达式的基础知识请参照有关资料,这里不再详述)。

注意,在Java中,你必须对每一个向前的斜杠("/")进行转义处理。所以我们要在上面的正则表达式里每个"/"前面加上一个"/"以免出现编译错误,也就是在JAVA中初始化正则表达式的字符串的语句应该为:

String restring=" //[[^]]+//]";

并且在表达式里每个符号中间不能有空格,否则就会同样出现编译错误。

2、实例化PatternCompiler对象,创建Pattern对象
PatternCompiler compiler=new Perl5Compiler();