Java正则表达式小记

时间:2022-02-08 05:16:01

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: