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

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

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]

而如果正则表达式为(/[[^]]+/])(/[[^]]+/]),则会查找到两个连续的方括号所包含的内容,也就找到[音标] [词性]两项,但是两项的结果分别在两个组里面,分别由下面语句获得结果: