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

你要留意到最后一个替换所用变量$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中,你必需对每一个向前的斜杠("https://www.jb51.net/")举办转义处理惩罚。所以我们要在上面的正则表达式里每个"https://www.jb51.net/"前面加上一个"https://www.jb51.net/"以免呈现编译错误,也就是在JAVA中初始化正则表达式的字符串的语句应该为:

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

而且在表达式里每个标记中间不能有空格,不然就会同样呈现编译错误。

2、实例化PatternCompiler工具,建设Pattern工具
PatternCompiler compiler=new Perl5Compiler();

Pattern pattern=compiler.compile(restring);

3、建设PatternMatcher工具,挪用PatternMatcher接口的contain()要领查抄匹配环境:

PatternMatcher matcher=new Perl5Matcher(); if (matcher.contains(content,pattern)) { //处理惩罚代码片断 }

这里matcher.contains(content,pattern)中的参数 content是从数据库里取来的字符串变量。该要领只会查到第一个匹配的工具字符串,可是由于音标项均在CONETNET内容字符串中的起始位置,所以用这个要领就已经可以担保把每笔记录里的音标项找出来了,但更为直接与公道的步伐是利用boolean matchesPrefix(PatternMatcherInput input, Pattern pattern)要领,该要领验证方针字符串是否以正则表达式所匹配的字串为起始。

详细实现的完整的措施代码如下:

package RegularExpressions; //import…… import org.apache.oro.text.regex.*; //利用Jakarta-ORO正则表达式库前需要把它加到CLASSPATH内里,假如用IDE是//JBUILDER,那么也可以在JBUILDER里直接自建新库。 public class yisuo { public static void main(String[] args) { try { //利用JDBC DRIVER举办DBMS毗连,这里我利用的是一个第三方JDBC //DRIVER,Microsoft自己也有一个面向SQLSERVER7/2000的免费JDBC //DRIVER,但其机能真的是奇差,不消也罢。 Class.forName("com.jnetdirect.jsql.JSQLDriver"); Connection con = DriverManager.getConnection("jdbc:JSQLConnect://kevin:1433", "kevin chen", "re"); Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); //为利用Jakarta-ORO库而建设相应的工具 String rsstring = " //[[^]]+//]"; PatternCompiler orocom = new Perl5Compiler(); Pattern pattern = orocom.compile(rsstring); PatternMatcher matcher = new Perl5Matcher(); ResultSet uprs = stmt.executeQuery("SELECT * FROM aesop"); while (uprs.next()) { Stirng word = uprs.getString("word"); Stirng content = uprs.getString("content"); if (matcher.contains(content, pattern)) { //或if(matcher.matchesPrefix(content,pattern)){ MatchResult result = matcher.getMatch(); Stirng pure = result.toString(); System.out.println(word + "的音标为:" + pure); } } } catch (Exception e) { System.out.println(e); } } }

输出功效为:kevin的音标为['kevin]

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

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