### Java JDK正则表达式详解 #### 一、概述 正则表达式是Java中用于处理字符串和文本的强大工具。它允许开发人员高效地搜索、替换或验证文本数据中的模式。在Java中,正则表达式的操作主要依赖于`java.util.regex`包中的两个关键类:`Pattern`和`Matcher`。 - **`Pattern`类**:表示编译后的正则表达式,它是不可变的对象,可以被重用。 - **`Matcher`类**:用于将模式应用于输入字符串以查找匹配项。它是可变对象,并且可以重复使用。 #### 二、示例分析与解析 ##### 示例一:基础匹配 ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegxOperator { public static void main(String[] args) { Pattern p = Pattern.compile("f(.+?)k"); // 编译正则表达式 Matcher m = p.matcher("fckfkkfkf"); // 创建Matcher实例 while (m.find()) { // 查找所有匹配项 String s0 = m.group(); // 获取整个匹配项 String s1 = m.group(1); // 获取第一个括号内的内容 System.out.println(s0 + "||" + s1); } System.out.println("---------"); m.reset("fucking!"); // 重置Matcher对象,使用新的输入字符串 while (m.find()) { System.out.println(m.group()); // 输出整个匹配项 } // 更复杂的匹配示例 Pattern p1 = Pattern.compile("f(.+?)i(.+?)h"); Matcher m1 = p1.matcher("finishabigfishfrish"); while (m1.find()) { String s0 = m1.group(); String s1 = m1.group(1); String s2 = m1.group(2); System.out.println(s0 + "||" + s1 + "||" + s2); } System.out.println("---------"); // 日期格式匹配示例 Pattern p3 = Pattern.compile("(19|20)\\d\\d([-/.])(0[1-9]|1[012])\\2(0[1-9]|[12][0-9]|3[01])"); Matcher m3 = p3.matcher("1900-01-012007/08/131900.01.01190001011900-01.011900130119000231"); while (m3.find()) { System.out.println(m3.group()); } } } ``` **输出结果:** ``` fck||c fkk||k --------- fuck finish||in||s fishfrish||ishfr||s --------- 1900-01-01 2007/08/13 1900.01.01 19000101 19000231 ``` **解析:** - 第一个示例中,正则表达式`f(.+?)k`用于匹配以"f"开头并以"k"结尾的字符串,其中括号内的`.`表示任意字符,`.+?`表示尽可能少的任意字符。 - 第二个示例更复杂,使用了多个括号来捕获不同的部分。例如,`f(.+?)i(.+?)h`用于匹配以"f"开头、中间部分以"i"为分隔符、并以"h"结尾的字符串。 - 第三个示例展示了如何使用正则表达式匹配日期格式。例如,`(19|20)\d\d([-/.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])`可以匹配多种格式的日期,包括使用破折号、斜杠或点作为分隔符。 ##### 示例二:日期格式提取 ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { String rawDate = "1900-01-012007/08/131900.01.01190001011900-01.011900130119000231"; String patternStr = "(\\d{4})[-/.](\\d{2})[-/.](\\d{2})"; // 匹配四位年份、两位月份、两位日期 Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(rawDate); while (matcher.find()) { System.out.println("fulldate is " + matcher.group()); System.out.println("year is " + matcher.group(1)); System.out.println("month is " + matcher.group(2)); System.out.println("date is " + matcher.group(3)); } } } ``` **输出结果:** ``` fulldate is 1900-01-01 year is 1900 month is 01 date is 01 fulldate is 2007/08/13 year is 2007 month is 08 date is 13 fulldate is 1900.01.01 year is 1900 month is 01 date is 01 fulldate is 1900 ... ``` **解析:** - 此示例中,我们使用了一个较为简单的正则表达式来匹配日期。该表达式`(\d{4})[-/.](\d{2})[-/.](\d{2})`用于匹配标准的日期格式,包括年、月、日,并且允许使用破折号、斜杠或点作为分隔符。 - 使用`Matcher`对象的方法`find()`来查找所有匹配项,并使用`group()`方法来获取每个匹配的部分。 - 通过这种方式,我们可以轻松地提取日期的不同组成部分,如年份、月份和日期。这对于数据清洗、格式化或进一步处理非常有用。 #### 三、总结 本篇文章通过具体的代码示例介绍了Java中如何使用正则表达式进行文本匹配。正则表达式是一种强大的工具,能够帮助开发人员高效地处理各种文本数据。通过理解`Pattern`和`Matcher`类的功能,以及如何编写有效的正则表达式,您可以更轻松地完成文本搜索、替换和验证任务。
- 粉丝: 4
- 资源: 29
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助