正则表达式中的内个陷阱
第一个需要注意的地方是:
p("abc888^&*".matches("[a-z]{1,3}\\d+[%^&*]+"));
在后面匹配的地方,小尖号^不能放在【】中括号的前面,不然就会匹配不成功
p("abc888^&*".matches("[a-z]{1,3}\\d+[^%&*]+"));
上面这段代码将会输出匹配不成功,因为[^%&*]匹配的是除了(%&*)这几个符号之外的字符。
陷阱二:
反斜线
p("\\".matches("\\\\"));
在Java中两个反斜线代表的是一个反斜线
第三
String str1 = "123-23456-1234-6777-12"; Pattern p1 = Pattern.compile("\\d{3,5}"); //创建一个正则表达式的编译器 Matcher m1 = p1.matcher(str1); //创建一个正则表达式的匹配器,匹配器的作用是将字符序列加载到编译器中与正则表达式进行匹配 p(m1.matches()); m1.reset(); //重置匹配器 p(m1.find());//查找与该模式匹配的输入序列的下一个子序列 p(m1.find()); p(m1.find()); p(m1.find()); p(m1.find());
4.
String str1 = "123-23456-1234-6777-12";
Pattern p1 = Pattern.compile("\\d{3,5}"); //创建一个正则表达式的编译器
Matcher m1 = p1.matcher(str1); //创建一个正则表达式的匹配器,匹配器的作用是将字符序列加载到编译器中与正则表达式进行匹配
p(m1.matches()); m1.reset(); //重置匹配器 p(m1.find());//查找与该模式匹配的输入序列的下一个子序列 p(m1.start()+"-"+m1.end()); //找到匹配字符串的起始和结束位置 p(m1.find()); p(m1.start()+"-"+m1.end()); p(m1.find()); p(m1.start()+"-"+m1.end()); p(m1.find()); p(m1.start()+"-"+m1.end()); p(m1.find());
当匹配不成功时,如果取得匹配字符串的位置将会导致异常,程序无法通过编译。
程序输出:
false
true
0-3
true
4-9
true
10-14
true
15-19
false

浙公网安备 33010602011771号