黑马程序员技术交流社区
标题:
正则表达式总结
[打印本页]
作者:
yaodd321
时间:
2014-11-4 19:27
标题:
正则表达式总结
正则表达式是一种强大而灵活的文本处理工具。使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索。一旦找到了匹配这些模式的部分,你就能随心所欲的对它们进行处理。其语法是一个难点,但它是一种简洁,动态的语言。正则表达式提供可一种完全通用的方式,能够解决各种字符串处理的相关问题:匹配,切割,替换和获取。
(1)匹配-其实就是String类中的match方法。
package cn.itcast.regex.demo;
public class RegexMatchDemo {
public static void main(String[] args) {
matchDemo();
}
public static void matchDemo() {
String tel = "15674356738";
String regex = "1[358]\\d{9}";
System.out.println(tel.matches(regex));
}
}
复制代码
(2)切割-其实就是String类中的split方法。
package cn.itcast.regex.demo;
public class RegexSplitDemo {
public static void main(String[] args) {
splitDemo();
}
public static void splitDemo() {
// String str = "zhangsan lisi wangwu";
String str = "zhangsantttttlisi@@@@@@wangwu";
// String regex = " +";
//多个重复的字符作为切割点
String regex = "(.)\\1+";
String[] names = str.split(regex);
for (String name : names) {
System.out.println(name);
}
}
}
复制代码
(3)替换
正则表达式特别便于替换操作,它提供了很多方法:replaceFirst()以参数字符串替换掉第一个匹配成功的部分。replaceAll()以参数字符串替换所有匹配成功的部分。appendReplacement()执行渐进是替换,而不像是replaceFirst()和replaceAll()那样只替换第一个匹配和全部匹配。
package examples;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 替换操作
* 1.replaceFirst()
* 2.replaceAll()
* 3.appendReplacement()
* 4.appendTail()
*
*/
public class TheReplacement {
public static String s = "/*! Here's a block of text to use as input to the regular exprission matcher."
+ " Note that we'll first extract the block of text by looking for the special delimiters, "
+ "then process the extracted block. !*/";
public static void main(String[] args) {
Matcher m = Pattern.compile("/\\*!(.*)!\\*/").matcher(s);
// 查找该模式匹配的序列的下一个子序列
if (m.find())
// 返回由以前匹配操作所匹配的子序列
s = m.group(1);
// 将存在两个或以上的空格替换为一个空格
s = s.replaceAll(" {2,}", " ");
// s = s.replaceAll("(?m)^ +" , "");
System.out.println(s);
s = s.replaceFirst("[aeiou]", "(VOWEL1)");
// System.out.println(s);
Pattern p = Pattern.compile(" \\w");// 将给定的正则表达式编译到模式中
Matcher m1 = p.matcher(s); // 将输入的序列与模式进行匹配,得到一个Matcher对象
/*
* while(m1.find()) s = m1.replaceAll(m1.group().toUpperCase());
* System.out.println(s);
*/
StringBuffer sb = new StringBuffer();
// 逐一替换
while (m1.find())
// 操作用来替换的字符串
m1.appendReplacement(sb, m1.group().toUpperCase());
m1.appendTail(sb);
System.out.println(sb.toString());
}
}
复制代码
(4)获取-将正则表达式封装成模式对象,然后获取给定对象与此模式的匹配器,调用匹配器的find()方法和group()方法
package examples;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexGetDemo {
public static void main(String[] args) {
getDemo();
}
public static void getDemo() {
String str = "da jia hao,ming tian bu fang jia!";
String regex = "\\b[a-z]{3}\\b";
// 1.将正则表达式封装成对象,将给定的正则表达式编译到模式中
Pattern p = Pattern.compile(regex);
// 2.获取匹配给定输入与此模式的匹配器
Matcher match = p.matcher(str);
boolean b = match.matches();
while (match.find()) {// 查找
System.out.println(match.group());// 获取子序列
}
}
}
复制代码
作者:
wf111sxwf
时间:
2014-11-6 11:32
好啊学习到了
作者:
dong53821713
时间:
2014-11-6 11:33
好东西啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2