正则表达式
正则表达式中的三种字符在字符串中的表示: 1.普通字符 跟普通字符串中无异 2.特殊字符 * ? | () [] {} a 表示本来的含义 在字符串中要写成”?” 注意是两个转义符, 第一个转义是在字符串中表示一个反斜杠 ,然后这个反斜杠和特殊字符一起表示正则表达式中它的本来含义 b 表示特殊含义 直接写就行 3.预定义字符(不包括. . 可以看作特殊字符) d w s 写法与特殊字符一样 “d” 其实本质上来说使用字符串来表示正则表达式需要经过两步,第一步就是先把字符串转换为内存中保存的真正形式,例如”*d” 保存到内存中就成为 *d 然后再按照正则表达式的规则 * 是特殊字符,所以* 就用来表示其本来含义,d 就表示一个预定义字符。 汉字的Unicode编码的范围时u4e00-u9fa5 下面是通过Scanner类和直接使用Pattern和Matcher类两种方式取出一个字符串中所有和正则表达式匹配的子串 1.直接Pattern和Matcher Pattern pattern = Pattern.compile("[u4e00-u9fa5]+"); Matcher matcher = pattern.matcher("welcome你好hello我不好thank你"); while(matcher.find()) { System.out.println(matcher.group()); }
2.使用Scanner类的findInLine方法 String str = "[u4e00-u9fa5]+"; Scanner scanner = new Scanner("welcome你好hello我不好thank你"); String result = null; while((result = scanner.findInLine(str)) != null) { System.out.println(result); } 下面的例子有点意思 String regStr = "((w+) (w+)) ((w+) (w+))"; String resource = "java is very easy"; Scanner scanner = new Scanner(resource); scanner.findInLine(regStr); MatchResult result = scanner.match(); System.out.println(result.group() == result.group(0)); for(int i = 0; i <= result.groupCount(); i++) { //System.out.println(result.group(i)); } /* 上面的结果是 group(0) 总是指向整体 捕获组是从左到右的索引,从 1 开始。组零表示整个模式,因此表达式 m.group(0) 等效于 m.group()。 java is very easy java is java is very easy very easy */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |