[abc] a、b、c中的一个
[^abc] 除了abc
[a-z&&d-f&&e-g] 在三个范围之内
. 任意字符
\d 数字0-9 [0-9]
\s 空白字符 [\t\n\x0B\f\r]
\w 单词字符 [a-zA-Z_0-9]
Greedy 数量词
X? X出现一次或者零次
X* X零次或多次
X+ X一次或多次
X{n} X恰好 n 次
X{n,} X至少 n 次
X{n,m} X至少 n 次不超过 m 次
^h 表示以h开头
h$ 表示以h结尾
System.out.println("a".matches("\\w{1,2}")); //以首字母h开通 System.out.println("hello".matches("^h\\w+")); //将后四位置为**** System.out.println("12344321".replaceAll("\\d{4}$", "****")); //固定电话规则 System.out.println("010-88880909-1212".matches("\\d{3,4}-\\d{7,8}(-\\d{1,7})?")); //邮箱规则 System.out.println("[email protected]".matches("[\\w_-]+@[\\w_-]+(\\.(\\w+)){1,2}")); //ip规则 System.out.println("192.168.1.249".matches("(((1[0-9])?[0-9]||[1-9][0-9]||25[0-5]||2[0-4][0-9])\\.){3}((1[0-9])?[0-9]||[1-9][0-9]||25[0-5]||2[0-4][0-9])"));
String str = "412525198907015719, 520121199012031232,123909198703120978"; Pattern p = Pattern.compile("(\\d{6})(\\d{8})(\\d{4})");//编译 Matcher m = p.matcher(str);//将编译规则与字符串匹配 m.matches();//判断是否匹配成功
A).boolean matches(); 返回是否完全匹配,只要判断出不符合规则,就停止往后读取字符,隐含的指针停留在该位置!
B).reset();将类部隐含的指针置于字符串的起始位置!
c).int start(); 返回以前匹配的初始索引位置
D).int end();返回最后匹配字符之后的偏移量。
E).boolean find();子字符串中寻找,只要找到就返回true,每次指针自动向后移动
F). String group();返回由以前匹配操作所匹配的输入子序列。
String group(int);返回由以前匹配操作所匹配的输入子序列的组。
((\\d{1})(\\d{2}))(\\d{3})括号由左到右
group(1)-->((\\d{1})(\\d{2}))
group(2)-->(\\d{1}) //将index较小的,其中不是元组,而里面还包含组,将组分解完全
group(3)-->(\\d{2}) group(4)-->(\\d{3})
Pattern p2 = Pattern.compile("<td>.*</td>"); //贪婪模式
Pattern p3 = Pattern.compile("<td>(.*?)</td>"); //非贪婪模式
String str2 = "<table><td>11啊11</td><td>22啊22</td><td>33啊33</td></table>"; Pattern p2 = Pattern.compile("<td>.*</td>"); //贪婪模式 Matcher m2 = p2.matcher(str2); while(m2.find()){ System.out.println(m2.group()); //<td>11啊11</td><td>22啊22</td><td>33啊33</td> } Pattern p3 = Pattern.compile("<td>(.*?)</td>"); //非贪婪模式 Matcher m3 = p3.matcher(str2); while(m3.find()){ System.out.println(m3.group(1)); //11啊11 //22啊22 //33啊33 }
package cn.itcast.StaticImport; import java.util.regex.Matcher; import java.util.regex.Pattern; /* * [abc] a、b、c中的一个 * [^abc] 除了abc * [a-z&&d-f&&e-g] 在三个范围之内 * . 任意字符 * \d 数字0-9 [0-9] * \s 空白字符 [\t\n\x0B\f\r] * \w 单词字符 [a-zA-Z_0-9] * * Greedy 数量词 * X? X出现一次或者零次 * X* X零次或多次 * X+ X一次或多次 * X{n} X恰好 n 次 * X{n,} X至少 n 次 * X{n,m} X至少 n 次不超过 m 次 * ^h 表示以h开头 * h$ 表示以h结尾 * * Strawberry2013-5-21 */ public class Test { public static void main(String[] args){ System.out.println("12344321".replaceAll("\\d{4}$", "****")); System.out.println("a".matches("\\w{1,2}")); System.out.println("hello".matches("^h\\w+")); //固定电话规则 System.out.println("010-88880909-1212".matches("\\d{3,4}-\\d{7,8}(-\\d{1,7})?")); //邮箱规则 System.out.println("[email protected]".matches("[\\w_-]+@[\\w_-]+(\\.(\\w+)){1,2}")); //ip规则 System.out.println("192.168.1.249".matches("(((1[0-9])?[0-9]||[1-9][0-9]||25[0-5]||2[0-4][0-9])\\.){3}((1[0-9])?[0-9]||[1-9][0-9]||25[0-5]||2[0-4][0-9])")); String str = "41252519890701571, 520121199012031232,123909198703120978"; Pattern p = Pattern.compile("(\\d{6})(\\d{8})(\\d{4})"); Matcher m = p.matcher(str); System.out.println(m.matches()); while(m.find()){ System.out.println("出生地:"+m.group(1)+"出生日期"+m.group(2)); } String str1 = "123456789"; Pattern p1 = Pattern.compile("((\\d{1})(\\d{2}))(\\d{3})"); Matcher m1 = p1.matcher(str1); while(m1.find()){ System.out.println(m1.group());//((\\d{1})(\\d{2}))(\\d{3}) 123456 System.out.println(m1.group(1));//(\\d{1})(\\d{2}) 123 System.out.println(m1.group(2));//(\\d{1}) 1 System.out.println(m1.group(3));//(\\d{2}) 23 System.out.println(m1.group(4));//(\\d{3}) 456 } String str2 = "<table><td>11啊11</td><td>22啊22</td><td>33啊33</td></table>"; Pattern p2 = Pattern.compile("<td>.*</td>"); //贪婪模式 Matcher m2 = p2.matcher(str2); while(m2.find()){ System.out.println(m2.group()); //<td>11啊11</td><td>22啊22</td><td>33啊33</td> } Pattern p3 = Pattern.compile("<td>(.*?)</td>"); //非贪婪模式 Matcher m3 = p3.matcher(str2); while(m3.find()){ System.out.println(m3.group(1)); //11啊11 //22啊22 //33啊33 } } }