注册
 找回密码
 注册
江西广告网
查看: 387|回复: 0
打印 上一主题 下一主题

正则表达式概述及在JAVA中的使用

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2008-12-28 12:10:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
  概述      你是否使用过查找*.tmp临时文件      你是否使用过编辑工具中的查找/替换功能      其实它们都使用了正则表达式      正则表达式的作用      提供更强大的字符串处理能力      测试字符串内的模式      例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或身份证号码模式。即数据验证      替换文本      可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。      基于模式匹配从字符串中提取子字符串      可以查找文档内或输入域内特定的文本。      在JAVA中使用正则表达式      正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持      jdk1.4中加入了java.util.regex包提供对正则表达式的支持。而且Java.lang.String类中的replaceAll和split函数也是调用的正则表达式来实现的。      正则表达式对字符串的操作主要包括:      1.字符串匹配      2.指定字符串替换      3.指定字符串查找      4.字符串分割      Pattern类      Pattern类的实例表示以字符串形式指定的正则表达式,其语 法类似于Perl所用的语法。      用字符串形式指定的正则表达式,必须先编译成Pattern类的 实例。生成的模式用于创建Matcher对象,它根据正则表达式与任 意字符序列进行匹配。多个匹配器可以共享一个模式,因为它是非专属的      用compile方法把给定的正则表达式编译成模式,然后用 matcher方法创建一个匹配器,这个匹配器将根据此模式对给定输 入进行匹配。pattern 方法可返回编译这个模式所用的正则表达 式。      Matcher类      通过调用某个模式的matcher方法,从这个模式生成匹配器。 匹配器创建之后,就可以用它来执行三类不同的匹配操作:      matches方法根据此模式,对整个输入序列进行匹配      lookingAt方法根据此模式,从开始处对输入序列进 行匹配。      find方法扫描输入序列,寻找下一个与模式匹配的地方      这些方法都会返回一个表示成功或失败的布尔值。如果匹配成功,通过查询 匹配器的状态,可以获得更多的信息      构建正则表达式      \d 等於 [0-9] 数字      \D 等於 [^0-9] 非数字      \s 等於 [ \t\n\x0B\f\r] 空白字符      \S 等於 [^ \t\n\x0B\f\r] 非空白字符      \w 等於 [a-zA-Z_0-9] 数字或是英文字      \W 等於 [^a-zA-Z_0-9] 非数字与英文字      $ 表示每行的结尾      . 匹配所有字符,包括空格、Tab字符甚至换行符   | 或      []方括号只允许匹配单个字符      ^ 符号称为“否”符号。如果用在方括号内,表示不想要匹配的字符。 表示每行的开头      ( ) 形成一组      查询   import java.util.regex.*;   public class RegexExample   {   public static void main(String[] args)   {   String str="aaabc efg ABC";   String regEx="aaa|fff";   Pattern p=Pattern.compile(regEx);//编译成模式   Matcher m=p.matcher(str);//创建一个匹配器   boolean rs=m.find();   if(rs)   {   System.out.println("include!!!");   }   else   {   System.out.println("no include!!!");   }   }   }      如果str中有regEx,那么rs为true,否则为flase。如果想在查找时忽略大小写,则可以写成Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);      提取      (从本例给出所给完整路径中提取文件名)im()p(ort java.util.rege   public class RegexExample2   {   public static void main(String[] args)   {   String regEx=". \\\\(. )$";   String str="c:\\dir1\\dir2\\name.txt";   Pattern p=Pattern.compile(regEx);   Matcher m=p.matcher(str);   boolean rs=m.find();   for(int i=1;i<=m.groupCount();i )   {   System.out.println(m.group(i));   }   }   }      以上的执行结果为name.txt,提取的字符串储存在m.group(i)中,其中i最大值为m.groupCount();      分割   import java.util.regex.*;   public class RegexExample3   {   public static void main(String[] args)   {   String regEx="::";   Pattern p=Pattern.compile(regEx);   String[] r=p.split("xd::abc::cde");   for(int i=0;i<r.length;i )   {   System.out.println(r);   }   }   }      执行后,r就是{“xd”,“abc”,“cde”},其实分割时还有跟简单的方法:   String str="xd::abc::cde";   String[] r=str.split("::");      替换(删除)   import java.util.regex.*;   public class RegexExample1   {   public static void main(String[] args)   {   String regEx="a ";//表示一个或多个a   Pattern p=Pattern.compile(regEx);   Matcher m=p.matcher("aaabbced a ccdeaa");   String s=m.replaceAll("A");   System.out.println(s);   }   }      结果为"Abbced A ccdeA"      如果写成空串,既可达到删除的功能,比如:   String s=m.replaceAll("");      结果为"bbced ccde"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表