Java中使用正则表达式实现字符串匹配

分类: J2SE   出处:iocblog整理  更新时间:2008-07-28   添加到收藏  


  黑暗岁月
  
  有一个string,如何查询其中是否有y和f字符?最黑暗的办法就是:
  
  程序1:我知道if、for语句和charat()啊。
  
  class test{
  public static void main(string args[]) {
  string str="for my money, the important thing "+"about the meeting was bridge-building";
  char x='y';
  char y='f';
  boolean result=false;
  for(int i=0;i<str.length;i++){
  char z=str.charat(i); //system.out.println(z);
  if(x==z||y==z) {
  result=true;
  break;
  }
  else result=false;
  }
  system.out.println(result);
  }
  }
  
  好像很直观,但这种方式难以应付复杂的工作。如查询一段文字中,是否有is?是否有thing或ting等。这是一个讨厌的工作。
  
  java的java.util.regex包
  
  按照面向对象的思路,把希望查询的字符串如is、thing或ting封装成一个对象,以这个对象作为模板去匹配一段文字,就更加自然了。作为模板的那个东西就是下面要讨论的正则表达式。先不考虑那么复杂,看一个例子: 程序2:不懂。先看看可以吧?
  
  import java.util.regex.*;
  
  class regex1{
  public static void main(string args[]) {
  string str="for my money, the important thing "+"about the meeting was bridge-building";
  string regex="a|f"; //表示a或f
  pattern p=pattern.compile(regex);
  matcher m=p.matcher(str);
  boolean result=m.find();
  system.out.println(result);
  }
  }
  
  如果str匹配regex,那么result为true,否则为flase。如果想在查找时忽略大小写,则可以写成:
  
  pattern p=pattern.compile(regex,pattern.case_insensitive);(来源 www.iocblog.net)
  
  虽然暂时不知道pattern(模板、模式)和matcher(匹配器)的细节,程序的感觉就比较爽,如果先查询is、后来又要查询thing或ting,我们只需要修改一下模板pattern,而不是考虑if语句和for语句,或者通过charat()。
  
  1、写一个特殊的字符串――正则表达式如a|f。
  
  2、将正则表达式编译成一个模板:p
  
  3、用模板p去匹配字符串str。
  
  思路清楚了,现在看java是如何处理的(java程序员直到jdk1.4才能使用这些类。
  
  pattern类与查找
  
  ①public final class java.util.regex.pattern是正则表达式编译后的表达法。下面的语句将创建一个pattern对象并赋值给句柄p:pattern p=pattern.compile(regex);
  
  有趣的是,pattern类是final类,而且它的构造器是private。也许有人告诉你一些设计模式的东西,或者你自己查有关资料。这里的结论是:pattern类不能被继承,我们不能通过new创建pattern类的对象。
  

[1] [2] 下一页


Tag: 正则表达式



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。