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: