java正则表达式及java.util.regex包的学习

参考http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html

  1. package sunfa.lx;
  2. import java.util.Arrays;
  3. import java.util.regex.Pattern;
  4. /**
  5. * java.util.regex包负责对字符序列进行正则表达式匹配
  6. * Pattern负责编译
  7. * Matcher负责匹配
  8. * ---------------
  9. * 正则表达式:
  10. *1、元字符 好比char,紧紧代表一个字符;
  11. *2、某些字符,比如\、.、*等这样的字符在正则表达式中已经被作为标记使用了,如果你想作为非元字符使用的话就得进行转义,转义的方法是在这些字符前面加\,
  12. * 比如\就变成\\,.就成为\.
  13. *3、重复的元字符有:*,+,?,{n},{n,},{n,m},这个标记是用来修饰它前面的那个字符的。
  14. *4、字符类,或称为分组[],比如[0-9],[0-9A-Za-z]用-表示范围
  15. */
  16. public class PatternDemo1 {
  17. public static void main(String[] args) {
  18. /**1、元字符的[]*/
  19. //[]属于元字符系列,所谓元字符简单的说就是字符,就是一个char,像bc就不是一个char了
  20. //      method2(new String[]{"abt","act","adt","abct","bt"}, "a[bcd]t");
  21. //[]的区间,-的两头代表区间,多区间这样写,比如[0-9a-zA-Z]
  22. //      method2(new String[]{"a1t","a3t","a01t","abt","2t"}, "a[0-9]t");
  23. //补集用^表示,在二元运算符中这是非的意思,尽管用了^,at还是不能通过,所以元字符[]必须有且仅有一个字符
  24. //      method2(new String[]{"a0t","a2t","abt","at"}, "a[^0246]t");
  25. /**2、元字符的? + * */
  26. //?的目标是它前面的一个字符,元字符?表示它前面的一个字符出现0次或1次
  27. //      method2(new String[]{"","a","aa","at","a1t"}, "a?");
  28. //元字符+的目标是它前面的一个字符,它表示它前面的那个字符出现1次或多次
  29. //      method2(new String[]{"","a","aa","aaaaa","at","a1t"}, "a+");
  30. //元字符*的目标是它前面的一个字符,它表示它前面那个字符出现0次或多次,*可以说是?和+的并集
  31. //      method2(new String[]{"","a","aa","aaaaa","at","a1t"}, "a*");
  32. /** .元字符能匹配任何字符(换行\r除外),所以用.*可以匹配换行外的任何字符串  */
  33. //      method2(new String[]{"","a","aa","aaaaa","at","a1t","\t","\r","n"}, ".");
  34. //      method2(new String[]{"","a","aa","aaaaa","at","a1t","\t","\r","n"}, ".*");
  35. /** 数量{n},{n,},{n,m}*/
  36. //{n}表示它前面的字符重复n次,并且只重复n次,重复n-1次或n+1次都是不可以的
  37. //      method2(new String[]{"","a","aa","aaaaa","at","a1t"}, "a{2}");
  38. //{n,}是对{n}的扩展,表示重复n次(包含n次)以上
  39. //      method2(new String[]{"","a","aa","aaaaa","at","a1t"}, "a{2,}");
  40. //{n,m}表示数目在n到m范围内,包含两头
  41. //      method2(new String[]{"","a","aa","aaa","aaaa","aaaaa","at"}, "a{2,4}");
  42. //      method2(new String[]{"12345-1234","12345"}, "\\d{5}-\\d{4}|\\d{5}");
  43. //
  44. //      method2(new String[]{"12345-123","12345"}, "\\d{5}|\\d{5}-\\d{4}");
  45. //      method2(new String[]{"211","12345"}, "2[0-4]\\d");
  46. //      method2(new String[]{"1","12345"}, "[01]?\\d\\d?");
  47. method2(new String[]{"1","12345","12"}, "[0-9]");
  48. }
  49. private static void method2(String[] a,String regex){
  50. Pattern p = Pattern.compile(regex);
  51. for (int i = 0; i < a.length; i++) {
  52. System.out.println(a[i]+","+p.matcher(a[i]).matches());
  53. }
  54. }
  55. private static void method1(){
  56. String str = "2011-11-12";
  57. String pat = "\\d{4}-\\d{2}-\\d{2}";
  58. System.out.println(Pattern.compile(pat).matcher(str).matches());
  59. String str1 = "a1b22c333d4444e55555f";
  60. //按数字来分割
  61. String[] str1Arr = Pattern.compile("\\d+").split(str1);
  62. System.out.println(Arrays.toString(str1Arr));
  63. //数字全部替换成_
  64. System.out.println(Pattern.compile("\\d+").matcher(str1).replaceAll("_"));
  65. //去除所有的空格
  66. System.out.println("\\s去除所有的空格:"+Pattern.compile("\\s").matcher("aa b c d ").replaceAll(""));
  67. System.out.println("5-10个字符:"+Pattern.compile(".{5,10}").matcher("12345").matches());
  68. System.out.println("多匹配:"+Pattern.compile("\\bhi.*Lucy\\b").matcher("hi后面不远处跟着一个Lucy").matches());
  69. System.out.println("多匹配2:"+Pattern.compile("^\\d{5,12}$").matcher("12345678a").matches());
  70. //直接调用String类提供的方法更加的方便
  71. System.out.println(Arrays.toString(str1.split("\\d+")));
  72. System.out.println("2011-11-12".matches("\\d{4}-\\d{2}-\\d{2}"));
  73. }
  74. }

java正则表达式及java.util.regex包的学习

时间: 2024-10-17 18:30:16

java正则表达式及java.util.regex包的学习的相关文章

关于使用JAVA正则表达式报java.lang.StackOverflowError错误问题

最近在使用hadoop做apache日志分析,发现测试数据没问题,但数据一多就出问题,报 java.lang.StackOverflowError错误,最后定位为正则表达式栈溢出,发现某些行的日志数据长度超过了800,所以就会报这个错误, 最后的解决方案是把这一小部分数据舍去掉. 添加如下代码 String log = value.toString(); if(log.length()>=800) return; 在map阶段读入每一行的时候先判断这一行的长度,如果长度超过了800就不对这一行进

java正则表达式之java小爬虫

这个java小爬虫, 功能很简单,只有一个,抓取网上的邮箱.用到了javaI/O,正则表达式. public static void main(String[] args) throws IOException { // TODO Auto-generated method stub // List<String> list= getEmail(); List<String> list= getEmailFromWeb(); for (String string : list) {

JAVA正则表达式:Pattern类与Matcher类详解(转)

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作

Java正则表达式教程及示例

本文由 ImportNew - ImportNew读者 翻译自 journaldev.欢迎加入翻译小组.转载请见文末要求. [感谢 @CuGBabyBeaR  的热心翻译.如果其他朋友也有不错的原创或译文,可以尝试投递到 ImportNew.] 当我开始我的Java职业生涯的时候,对于我来说正则表达式简直是个是梦魇.本教程旨在帮助你驾驭Java正则表达式,同时也帮助我复习正则表达式. 什么是正则表达式? 正则表达式定义了字符串的模式.正则表达式可以用来搜索.编辑或处理文本.正则表达式并不仅限于某

JAVA 正则表达式 (超详细)

(PS:这篇文章为转载,我不喜欢转载的但我觉得这篇文章实在是超赞了,就转了过来,这篇可以说是学习JAVA正则表达的必读篇.作者是个正真有功力的人,阅读愉快) 在Sun的JavaJDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式.正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性.在Unix世界里,正则表达式几乎没有

Java 正则表达式(精华)

英文:Jakob Jenkov译文:严亮链接:ifeve.com/java-regex/ Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索出现的模式.例如,你可以用正则表达式搜索网页中的邮箱地址或超链接. 正则表达式示例 下面是一个简单的Java正则表达式的例子,用于在文本中搜索 http:// String text = "This is th

Java正则表达式入门

众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 大 家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.  自从jdk1.4

JAVA正则表达式:Pattern类与Matcher类详解

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作

Java正则表达式使用入门

Java中正则表达式的使用是很方便的,基本上只需要使用java.util.regex包下的两个类就行,分别是Pattern和Matcher. Pattern:正则表达式的编译表示形式,指定的正则表达式必须首先编译为此类的实例然后才可以匹配字符生成Matcher对象. Matcher:通过Pattern对字符匹配创建,可以通过它来判断Pattern是否匹配成功,以及在匹配成功的情况下从字符串中取出需要的内容. 以下是我写的一个小例子,从一段字符串中利用正则表达式取出需要的内容: 1 package