黑马程序员_正则表达式
2012-12-12 13:07
330 查看
------- android培训、java培训、期待与您交流! ----------
正则表达式:用于操作字符串数据的方法
String类中有一个matches(regex)方法,参数为正则表达式。就是一些规则:这些规则用一些符合组成,每个符号都代表特有的含义。都对应着底层的代码,对外提供符号是为了简化操作和书写。
规则通过查API可以学习。
1、常见操作
1)匹配功能
String类中的matches()方法
如我们要对手机号码进行匹配校验。
private static void checkTel() {
String str = "15033339440";
String reg = "1[358]\\d{9}";
boolean b = str.matches(reg);
System.out.println(str + ": " + b);
}
2)切割功能
String类中的split()方法
private static void splitDemo() {
String str = "abceemengqqweitttjuan";
String reg = "(.)\\1+";
String[] arr = str.split(reg);
for(String s : arr){
System.out.println(s);
}
}
我们用“叠词”来分割字符串。怎么用正则表达式表示呢?
.代表任意字符,用括号括起来表示捕获组,\\1表示匹配第一组,+表示出现相同字符多于一次。就可以表示用叠词分割了。
3) 替换功能
String类中的replaceAll()方法
private static void replaceAllDemo() {
//把叠词都提成成单个字符
//把手机中间四位用*替代
String str = "15033339440";
String s1 = str.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
System.out.println(s1);
}
第一个:我们想要把叠词替换成单个字符。还是用上面讲过的正则表达式方法,后一个参数可以通过$加上数字,来表示引用前一个参数的第几组。
第二个:我们想要把手机中间四位替换成*号,我们也用了组的概念,把前三位,中间四位,后四位分开,前三位和后四位分成两组,保留这两组,中间用*代替,即可以达到预期的效果:150****9440
4)获取功能
private static void findDemo() {
String str = "da jia zhu yi le , yao pai wei dian ying le ";
String reg = "\\b[a-z]{3}\\b";
//先将正则表达式编译成Pattern对象
Pattern p = Pattern.compile(reg);
//通过Pattern对象的matcher方法获取Matcher匹配器对象
Matcher m = p.matcher(str);
//find()方法:尝试查找与该模式匹配的输入序列的下一个子序列。
while(m.find()){
//group()方法:返回由以前匹配操作所匹配的输入子序列
System.out.println(m.group());
}
}
由上例我们可以知道,要将匹配规则的内容获取出来,需要使用正则表达式对象Pattern。
步骤是:1)先将正则表达式编译成Pattern对象
2)通过Pattern对象的matcher方法获取Matcher匹配器对象
3)通过匹配器对象的方法,将正则规则作用到字符串上以便于操作。
常见方法有:find()尝试查找与该模式匹配的输入序列的下一个子序列。
group()返回由以前匹配操作所匹配的输入子序列
start()返回以前匹配的初始索引
end() 返回最后匹配字符之后的偏移量
正则表达式:用于操作字符串数据的方法
String类中有一个matches(regex)方法,参数为正则表达式。就是一些规则:这些规则用一些符合组成,每个符号都代表特有的含义。都对应着底层的代码,对外提供符号是为了简化操作和书写。
规则通过查API可以学习。
1、常见操作
1)匹配功能
String类中的matches()方法
如我们要对手机号码进行匹配校验。
private static void checkTel() {
String str = "15033339440";
String reg = "1[358]\\d{9}";
boolean b = str.matches(reg);
System.out.println(str + ": " + b);
}
2)切割功能
String类中的split()方法
private static void splitDemo() {
String str = "abceemengqqweitttjuan";
String reg = "(.)\\1+";
String[] arr = str.split(reg);
for(String s : arr){
System.out.println(s);
}
}
我们用“叠词”来分割字符串。怎么用正则表达式表示呢?
.代表任意字符,用括号括起来表示捕获组,\\1表示匹配第一组,+表示出现相同字符多于一次。就可以表示用叠词分割了。
3) 替换功能
String类中的replaceAll()方法
private static void replaceAllDemo() {
//把叠词都提成成单个字符
//把手机中间四位用*替代
String str = "15033339440";
String s1 = str.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
System.out.println(s1);
}
第一个:我们想要把叠词替换成单个字符。还是用上面讲过的正则表达式方法,后一个参数可以通过$加上数字,来表示引用前一个参数的第几组。
第二个:我们想要把手机中间四位替换成*号,我们也用了组的概念,把前三位,中间四位,后四位分开,前三位和后四位分成两组,保留这两组,中间用*代替,即可以达到预期的效果:150****9440
4)获取功能
private static void findDemo() {
String str = "da jia zhu yi le , yao pai wei dian ying le ";
String reg = "\\b[a-z]{3}\\b";
//先将正则表达式编译成Pattern对象
Pattern p = Pattern.compile(reg);
//通过Pattern对象的matcher方法获取Matcher匹配器对象
Matcher m = p.matcher(str);
//find()方法:尝试查找与该模式匹配的输入序列的下一个子序列。
while(m.find()){
//group()方法:返回由以前匹配操作所匹配的输入子序列
System.out.println(m.group());
}
}
由上例我们可以知道,要将匹配规则的内容获取出来,需要使用正则表达式对象Pattern。
步骤是:1)先将正则表达式编译成Pattern对象
2)通过Pattern对象的matcher方法获取Matcher匹配器对象
3)通过匹配器对象的方法,将正则规则作用到字符串上以便于操作。
常见方法有:find()尝试查找与该模式匹配的输入序列的下一个子序列。
group()返回由以前匹配操作所匹配的输入子序列
start()返回以前匹配的初始索引
end() 返回最后匹配字符之后的偏移量
相关文章推荐
- 黑马程序员Java——正则表达式
- 黑马程序员_正则表达式
- 黑马程序员 知识点总结-Java正则表达式
- 黑马程序员----Java正则表达式校验邮箱和手机号码
- 黑马程序员_反射技术和正则表达式
- 黑马程序员-------------------java基础--------------------正则表达式
- 黑马程序员_正则表达式
- 黑马程序员 Java正则表达式,详解反斜线在Java中的作用
- 黑马程序员---java基础之正则表达式
- 黑马程序员----正则表达式
- 黑马程序员-我的摘录-正则表达式总结-需要加强
- 黑马程序员——学习笔记13.Java正则表达式
- 黑马程序员_Java正则表达式
- 黑马程序员:正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_学习笔记第24天——正则表达式
- 黑马程序员-JAVA-字符串与正则表达式粗解
- 黑马程序员--JAVA基础复习之正则表达式
- 黑马程序员java笔记之七-----正则表达式
- 黑马程序员 16 Java基础教学 - 16 - 正则表达式总结