Java中使用正则表达式实现字符串匹配
黑暗岁月
有一个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类的对象。
Tag: 正则表达式
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。