为什么80%的码农都做不了架构师?>>>
1、常规模式
\d 数字字符[0-9] \D 非数字[^0-9]
\s 空白字符[ \t\n\x0B\f\r] \S 非空白[^\s]
\w 单词字符[a-zA-Z_0-9] \W 非单词[^\w]
| 同时匹配多个模式
2、贪婪模式
greedy(贪心的;渴望的;贪婪的)与reluctant(勉强的;厌恶的;非贪婪)
3、条件模式
(?=X) zero-width非捕获 positive肯定的 lookahead 先行
(?!X) zero-width非捕获 negative否认的 lookahead 先行
(?<=X) zero-width非捕获 positive肯定的 lookbehind追溯
(?
模式前后加条件,肯定模式表示匹配某个正则,否定模式表示不匹配某个正则,先行表示欲匹配正则右侧条件,追溯表示欲匹配正则左侧条件。
理解以下代码后再看jdk的Pattern类帮助,应该就比较全面了。
public static void m(String pattern)
{
String str = "[email protected]";//所有正则使用同一个字符串测试
System.out.println(str + "匹配正则" + pattern + "的结果:");
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(str);
int i = 1;//匹配结果序号
while(m.find()){
System.out.println(i++ + ") " + m.group());
}
}
public static void main(String[] args) throws Throwable
{
//字母开头,24个以内的单词字符,@后面24个以内的单词字符,以.com或.net结尾
m("[a-zA-Z]\\w{3,23}@\\w{1,24}\\.com|[a-zA-Z]\\w{3,23}@\\w{1,24}\\.net");
//匹配结果:[email protected]
//贪婪,最大匹配
m(".+o"); //匹配结果:[email protected]
//懒惰,最小匹配
m(".+?o");//匹配结果:h2do和@e4say.co
//前面是h字符
m("(?<=h)\\d");//匹配结果:2
//前面不是h字符
m("(?
[email protected]匹配正则[a-zA-Z]\w{3,23}@\w{1,24}\.com|[a-zA-Z]\w{3,23}@\w{1,24}\.net的结果:
[email protected]匹配正则.+o的结果:
[email protected]匹配正则.+?o的结果:
1) h2do
2) @e4say.co
[email protected]匹配正则(?<=h)\d的结果:
1) 2
[email protected]匹配正则(?
1) 4
[email protected]匹配正则\d(?=d)的结果:
1) 2
[email protected]匹配正则\d(?!d)的结果:
1) 4
[email protected]匹配正则(?
1) 4