正则有那么难吗?
1、常规模式 d 数字字符[0-9] D 非数字[^0-9] s 空白字符[ tnx0Bfr] 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |