正则有那么难吗?

前端之家收集整理的这篇文章主要介绍了正则有那么难吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

原文链接:https://www.f2er.com/regex/361129.html

猜你在找的正则表达式相关文章