正则有那么难吗?

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追溯

(?<!X) zero-width非捕获 negative否认的 lookbehind追溯

模式前后加条件,肯定模式表示匹配某个正则,否定模式表示不匹配某个正则,先行表示欲匹配正则右侧条件,追溯表示欲匹配正则左侧条件。

理解以下代码后再看jdk的Pattern类帮助,应该就比较全面了。

publicstaticvoidm(Stringpattern)
{
Stringstr="h2do@e4say.com.cn";//所有正则使用同一个字符串测试
System.out.println(str+"匹配正则"+pattern+"的结果:");

Patternp=Pattern.compile(pattern);
Matcherm=p.matcher(str);
inti=1;//匹配结果序号
while(m.find()){
System.out.println(i+++")"+m.group());
}
}

publicstaticvoidmain(String[]args)throwsThrowable
{
//字母开头,24个以内的单词字符,@后面24个以内的单词字符,以.com或.net结尾
m("[a-zA-Z]\\w{3,23}@\\w{1,24}\\.com|[a-zA-Z]\\w{3,24}\\.net");
//匹配结果:h2do@e4say.com

//贪婪,最大匹配
m(".+o");//匹配结果:h2do@e4say.co
//懒惰,最小匹配
m(".+?o");//匹配结果:h2do和@e4say.co

//前面是h字符
m("(?<=h)\\d");//匹配结果:2
//前面不是h字符
m("(?<!h)\\d");//匹配结果:4
//后面是d字符
m("\\d(?=d)");//匹配结果:2
//后面不是d字符
m("\\d(?!d)");//匹配结果:4
//后面不是d字符,并且前面不是h字符
m("(?<!h)\\d(?!d)");//匹配结果:4

}

h2do@e4say.com.cn匹配正则[a-zA-Z]\w{3,23}@\w{1,24}\.com|[a-zA-Z]\w{3,24}\.net的结果:

1) h2do@e4say.com

h2do@e4say.com.cn匹配正则.+o的结果:

1) h2do@e4say.co

h2do@e4say.com.cn匹配正则.+?o的结果:

1) h2do

2) @e4say.co

h2do@e4say.com.cn匹配正则(?<=h)\d的结果:

1) 2

h2do@e4say.com.cn匹配正则(?<!h)\d的结果:

1) 4

h2do@e4say.com.cn匹配正则\d(?=d)的结果:

1) 2

h2do@e4say.com.cn匹配正则\d(?!d)的结果:

1) 4

h2do@e4say.com.cn匹配正则(?<!h)\d(?!d)的结果:

1) 4

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...