Java正则表达式小记

来源:互联网 发布:周杰伦才华 知乎 编辑:程序博客网 时间:2024/06/07 18:25

http://blog.csdn.net/pipisorry/article/details/51059500

正则表达式的一般规则都一样,见[python正则表达式]


java正则表达式中的特殊字符转义

1.字符"|","*","+"都得加上转义字符,前面加上"\\"。
2.而如果是"\",那么就得写成"\\\\"。(java正则表达式用起来都这么不爽!!!)


java字符串分割

java正则表达式可以使用库java.util.regex

也可以使用String自带的方法如sourceStr.split(regex,maxSplit),split 的实现直接调用的 matcher 类的 split 的方法

StringTokenizer 类允许应用程序将字符串分解为标记。StringTokenizer 是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包。但是StringTokenizer对于字符串"192.168..33"的分割,返回的字符串数组只有3个元素,对于两个分隔符之间的空字符串会忽略,这个要慎重使用。但是String.split(String.split是用正则表达式匹配,所以不使用KMP字符串匹配算法)用的都是按顺序遍历的算法,时间复杂度O(m*n),较高,所以性能上,StringTokenizer好很多,对于频繁使用字符串分割的应用,例如etl数据处理,使用StringTokenizer性能可以提高很多。


查找并抽取对应条件字符串

package Test;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test {public static void main(String[] args) {Test t = new Test();t.test4();}public void test4() {Pattern pattern = Pattern.compile("(.+?)\\(R(.+?)\\)");Matcher matcher = pattern.matcher("avg(R4)");if (matcher.find()) {System.out.println(matcher.group(1));// 分组的索引值是从1开始的,所以取第一个分组的方法是m.group(1)而不是m.group(0)。System.out.println(matcher.group(2));}}}

avg
4

前向后向查找

import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test {public static void main(String[] args) {Test t = new Test(); t.t7();}public void t7() {// 向后匹配String a = "I paid $90 for 10 oranges, 12 pears and 8 apples. I saved $5 on ";Pattern p = Pattern.compile("(?<=\\$)\\d+");Matcher m = p.matcher(a);while (m.find()) {String group = m.group();System.out.println(group);}// 向前匹配a = "https://mail.huawei.com ";p = Pattern.compile(".+(?=:)");m = p.matcher(a);while (m.find()) {String group = m.group();System.out.println(group);}}}

规则参考[python正则表达式-Python支持的正则表达式元字符和语法-特殊构造]

from: http://blog.csdn.net/pipisorry/article/details/51059500

ref: 


0 0