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]
在这个处理中我是用toString()方法来取得结果,但是如果正则表达式里是用了分组符号(圆括号),那么就可以用group(int gid)的方法来取得相应各组匹配的结果,如正则表达式改为" (/[[^]]+/])",那么就可以用以下方法来取得结果:pure=result.group(0);
用程序验证,输出结果同样为:kevin的音标为['kevin]
而如果正则表达式为(/[[^]]+/])(/[[^]]+/]),则会查找到两个连续的方括号所包含的内容,也就找到[音标] [词性]两项,但是两项的结果分别在两个组里面,分别由下面语句获得结果:









