正则表达式是一种强大而灵活的文本处理工具。使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索。一旦找到了匹配这些模式的部分,你就能随心所欲的对它们进行处理。其语法是一个难点,但它是一种简洁,动态的语言。正则表达式提供可一种完全通用的方式,能够解决各种字符串处理的相关问题:匹配,切割,替换和获取。
(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());// 获取子序列
- }
- }
- }
复制代码 |