`
wangangie10
  • 浏览: 39233 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java正则表达式匹配使用实例

 
阅读更多

  实例一: 
  正则式是最简单的能准确匹配一个给定String的模式,模式与要匹配的文本是等价的.静态的Pattern.matches方法用于比较一个String是否匹配一个给定模式.例程如下: 
  String data="java"; 
  boolean result=Pattern.matches("java",data); 
  实例二: 
  String[] dataArr = { "moon", "mon", "moon", "mono" }; 
  for (String str : dataArr) { 
  String patternStr="m(o+)n"; 
  boolean result = Pattern.matches(patternStr, str); 
  if (result) { 
  System.out.println("字符串"+str+"匹配模式"+patternStr+"成功"); 
  } 
  else{ 
  System.out.println("字符串"+str+"匹配模式"+patternStr+"失败"); 
  } 
  } 
  模式是"m(o+)n",它表示mn中间的o可以重复一次或多次,因此moon,mon,mooon能匹配成功,而mono在n后多了一个o,和模式匹配不上. 
  注: 
  +表示一次或多次;?表示0次或一次;*表示0次或多次. 
  实例三: 
  String[] dataArr = { "ban", "ben", "bin", "bon" ,"bun","byn","baen"}; 
  for (String str : dataArr) { 
  String patternStr="b[aeiou]n"; 
  boolean result = Pattern.matches(patternStr, str); 
  if (result) { 
  System.out.println("字符串"+str+"匹配模式"+patternStr+"成功"); 
  } 
  else{ 
  System.out.println("字符串"+str+"匹配模式"+patternStr+"失败"); 
  } 
  } 
  注:方括号中只允许的单个字符,模式"b[aeiou]n"指定,只有以b开头,n结尾,中间是a,e,i,o,u中任意一个的才能匹配上,所以数组的前五个可以匹配,后两个元素无法匹配. 
  方括号[]表示只有其中指定的字符才能匹配. 
  实例四: 
  String[] dataArr = { "been", "bean", "boon", "buin" ,"bynn"}; 
  for (String str : dataArr) { 
  String patternStr="b(ee|ea|oo)n"; 
  boolean result = Pattern.matches(patternStr, str); 
  if (result) { 
  System.out.println("字符串"+str+"匹配模式"+patternStr+"成功"); 
  } 
  else{ 
  System.out.println("字符串"+str+"匹配模式"+patternStr+"失败"); 
  } 
  } 
  如果需要匹配多个字符,那么[]就不能用上了,这里我们可以用()加上|来代替,()表示一组,|表示或的关系,模式b(ee|ea|oo)n就能匹配been,bean,boon等. 
  因此前三个能匹配上,而后两个不能. 
  实例五: 
  String[] dataArr = { "1", "10", "101", "1010" ,"100+"}; 
  for (String str : dataArr) { 
  String patternStr="\d+"; 
  boolean result = Pattern.matches(patternStr, str); 
  if (result) { 
  System.out.println("字符串"+str+"匹配模式"+patternStr+"成功"); 
  } 
  else{ 
  System.out.println("字符串"+str+"匹配模式"+patternStr+"失败"); 
  } 
  } 
  注:从前面可以知道,\d表示的是数字,而+表示一次或多次,所以模式\d+就表示一位或多位数字. 
  因此前四个能匹配上,最后一个因为+号是非数字字符而匹配不上. 
  实例六: 
  String[] dataArr = { "a100", "b20", "c30", "df10000" ,"gh0t"}; 
  for (String str : dataArr) { 
  String patternStr="\w+\d+"; 
  boolean result = Pattern.matches(patternStr, str); 
  if (result) { 
  System.out.println("字符串"+str+"匹配模式"+patternStr+"成功"); 
  } 
  else{ 
  System.out.println("字符串"+str+"匹配模式"+patternStr+"失败"); 
  } 
  } 
  模式\w+\d+表示的是以多个单字字符开头,多个数字结尾的字符串,因此前四个能匹配上,最后一个因为数字后还含有单字字符而不能匹配. 
  实例七: 
  String str="薪水,职位 姓名;年龄 性别"; 
  String[] dataArr =str.split("[,\s;]"); 
  for (String strTmp : dataArr) { 
  System.out.println(strTmp); 
  } 
  String类的split函数支持正则表达式,上例中模式能匹配",",单个空格,";"中的一个,split函数能把它们中任意一个当作分隔符,将一个字符串劈分成字符串数组. 
  实例八: 
  String str="2007年12月11日"; 
  Pattern p = Pattern.compile("[年月日]"); 
  String[] dataArr =p.split(str); 
  for (String strTmp : dataArr) { 
  System.out.println(strTmp); 
  } 
  Pattern是一个正则表达式经编译后的表现模式 ,它的split方法能有效劈分字符串. 
  注意其和String.split()使用上的不同. 
  实例九: 
  String str="10元 1000人民币 10000元 100000RMB"; 
  str=str.replaceAll("(\d+)(元|人民币|RMB)", "¥"); 
  System.out.println(str); 
  上例中,模式"(\d+)(元|人民币|RMB)"按括号分成了两组,第一组\d+匹配单个或多个数字,第二组匹配元,人民币,RMB中的任意一个,替换部分表示第一个组匹配的部分不变,其余组替换成¥. 
  替换后的str为¥10 ¥1000 ¥10000 ¥100000 
  实例十: 
  Pattern p = Pattern.compile("m(o+)n",Pattern.CASE_INSENSITIVE) ; 
  // 用Pattern类的matcher()方法生成一个Matcher对象 
  Matcher m = p.matcher("moon mooon Mon mooooon Mooon"); 
  StringBuffer sb = new StringBuffer(); 
  // 使用find()方法查找第一个匹配的对象 
  boolean result = m.find(); 
  // 使用循环找出模式匹配的内容替换之,再将内容加到sb里 
  while (result) { 
  m.appendReplacement(sb, "moon"); 
  result = m.find(); 
  } 
  // 最后调用appendTail()方法将最后一次匹配后的剩余字符串加到sb里; 
  m.appendTail(sb); 
  System.out.println("替换后内容是" + sb.toString()); 
  实例十一: 
  除了用+表示一次或多次,*表示0次或多次,?表示0次或一次外,还可以用{}来指定精确指定出现的次数,X{2,5}表示X最少出现2次,最多出现5次;X{2,}表示X最少出现2次,多则不限;X{5}表示X只精确的出现5次. 
  例程: 
  String[] dataArr = { "google", "gooogle", "gooooogle", "goooooogle","ggle"}; 
  for (String str : dataArr) { 
  String patternStr = "g(o{2,5})gle"; 
  boolean result = Pattern.matches(patternStr, str); 
  if (result) { 
  System.out.println("字符串" + str + "匹配模式" + patternStr + "成功"); 
  } else { 
  System.out.println("字符串" + str + "匹配模式" + patternStr + "失败"); 
  } 
  } 
  实例十二: 
  -表示从..到…,如[a-e]等同于[abcde] 
  String[] dataArr = { "Tan", "Tbn", "Tcn", "Ton","Twn"}; 
  for (String str : dataArr) { 
  String regex = "T[a-c]n"; 
  boolean result = Pattern.matches(regex, str); 
  if (result) { 
  System.out.println("字符串" + str + "匹配模式" + regex + "成功"); 
  } else { 
  System.out.println("字符串" + str + "匹配模式" + regex + "失败"); 
  } 
  } 
  实例十三:不区分大小写匹配. 
  正则表达式默认都是区分大小写的,使用了Pattern.CASE_INSENSITIVE则不对大小写进行区分. 
  String patternStr="ab"; 
  Pattern pattern=Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE); 
  String[] dataArr = { "ab", "Ab", "AB"}; 
  for (String str : dataArr) { 
  Matcher matcher=pattern.matcher(str); 
  if(matcher.find()){ 
  System.out.println("字符串" + str + "匹配模式" + patternStr + "成功"); 
  } 
  } 
  实例十四:使用正则表达式劈分字符串. 
  注意这里要把复杂的模式写在前面,否则简单模式会先匹配上. 
  String input="职务=GM 薪水=50000 , 姓名=职业经理人 ; 性别=男 年龄=45 "; 
  String patternStr="(\s*,\s*)|(\s*;\s*)|(\s+)"; 
  Pattern pattern=Pattern.compile(patternStr); 
  String[] dataArr=pattern.split(input); 
  for (String str : dataArr) { 
  System.out.println(str); 
  } 
  实例十五:解析正则表达式中的文字,\1对应第一个小括号括起来的group1. 
  String regex="(\w+)"; 
  Pattern pattern=Pattern.compile(regex); 
  String input="Bill50000GM"; 
  Matcher matcher=pattern.matcher(input); 
  while(matcher.find()){ 
  System.out.println(matcher.group(2)); 
  } 
  实例十六:将单词数字混合的字符串的单词部分大写. 
  String regex="([a-zA-Z]+[0-9]+)"; 
  Pattern pattern=Pattern.compile(regex); 
  String input="age45 salary500000 50000 title"; 
  Matcher matcher=pattern.matcher(input); 
  StringBuffer sb=new StringBuffer(); 
  while(matcher.find()){ 
  String replacement=matcher.group(1).toUpperCase(); 
  matcher.appendReplacement(sb, replacement); 
  } 
  matcher.appendTail(sb); 
  System.out.println("替换完的字串为"+sb.toString()); 
分享到:
评论

相关推荐

    java正则表达式经典实例

    说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述...

    Java使用正则表达式提取XML节点内容的方法示例

    主要介绍了Java使用正则表达式提取XML节点内容的方法,结合具体实例形式分析了java针对xml格式字符串的正则匹配相关操作技巧,需要的朋友可以参考下

    JAVA正则表达式实例教程.pdf

    JAVA正则表达式实例教程.pdf 1、正则表达式的知识要点 1、正则表达式是什么? 正则表达式是一种可以用于模式匹配和替换的强有力的工具。 2、正则表达式的优点? 更少的代码,更高的效率。 3、正则表达式如何使用? ...

    JAVA 正则表达式 教程

    我在一次偶然中发现了位于 java.sun.com 站点上的 Java Tutorial,也在那里看到了关于 Java 的正则表达式教程,感觉它不同于其他的正则表达式教程,文中以大量的匹配实例来进行说明。为了能让 Java 学习者能更好地...

    java正则表达式实例(邮箱,车牌,密码,url,IP,身份证,车牌等等)

    正则表达式 实例

    java-regex正则表达式

    本文当是java正则表达式实例教程,从入门语法开始,结合源代码实例,详细讲解了java正则表达式用法和相关细节

    java中常用的匹配正则表达式实例大全.doc

    java中常用的匹配正则表达式实例大全.doc

    java正则表达式实例

    * 匹配的例子: * (GC_F_BA_ACD_FDALFD_I_FALDJF) * (GC_F_BA_ACD_FDALFD) * (GC_F_BA_ACD)等 * * 解释 * \\( \\)表示:前后的一对小括号 * * [A-Z]+(\\_[A-Z]+)* * [A-Z]+ 1个或多个大写字母 * (\\_[A...

    java中常用的匹配正则表达式实例大全

    java 中常用的匹配正则表达式实例大全 (Email地址、网址URL、帐号是否合法、国内电话号码、身份证、腾讯QQ号、国内电话号码、ip地址、特定数字 等等)

    JAVA正则表达式--Pattern和Matcher

    JAVA正则表达式--Pattern和Matcher 现在JDK1.4里终于有了自己的正则表达式API包,JAVA程序员可以免去找第三方提供的正则表达式库的周折了,我们现在就马上来了解一下这个SUN提供的­迟来恩物- -对我来说确实如此。...

    正则表达式经典实例中文版 (美)高瓦特斯

    即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,《正则表达式经典实例》对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括C#、Java、JavaScript、Perl、PHP、...

    正则表达式经典实例

    本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET的实例。  本书主要包括以下内容:  通过一个精练的教程理解正则...

    正则表达式经典实例.pdf

    本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET的实例。  本书主要包括以下内容:  通过一个精练的教程理解正则...

    Java正则表达式详解

    Java正则表达式详解,附有实例,通俗易懂。 如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular ...

    java正则表达式详解

    java正则表达式 详细的讲解了java中正则表达式的各个符号 各种匹配规则 以及使用实例 其实不只适用于java 其他语言也可以 如:javascript

    Java正则表达式验证固定电话号码符合性

    主要介绍了Java正则表达式验证固定电话号码符合性的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

    Java使用正则表达式(regex)匹配中文实例代码

    本文给大家分享java使用正则表达式匹配中文的实例代码,以及java中要匹配中文的正则表达式两种写法,感兴趣的朋友通过本文一起看看吧

    正则表达式教程之匹配单个字符详解

    注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过。 java测试代码: /** ...

    正则表达式教程之位置匹配详解

    注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过。 一、问题引入 如果想...

Global site tag (gtag.js) - Google Analytics