Java正则表达式详解

preview
需积分: 0 2 下载量 184 浏览量 更新于2009-02-03 收藏 839KB PDF 举报
### Java正则表达式详解 #### 一、正则表达式基础知识 正则表达式是一种强大的文本处理工具,能够帮助用户查找、替换以及操作特定的字符串。正则表达式的使用非常广泛,几乎所有的编程语言都有相应的支持。对于Java开发者而言,掌握正则表达式能够极大地提高开发效率。 ##### 1.1 句点符号(`.`) 句点符号是正则表达式中最基本的元素之一。它可以匹配除换行符之外的任意单个字符。例如,如果要匹配以“t”开头,以“n”结尾的所有三个字母的单词,可以使用表达式“t.n”。这将匹配诸如“tan”、“ten”等单词,但也会匹配“t#n”、“tpn”等不符合常规的组合,因为句点符号匹配所有字符。 **示例:** ```java String regex = "t.n"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher("tan"); if (matcher.find()) { System.out.println("Matched: " + matcher.group()); } ``` ##### 1.2 方括号符号 (`[]`) 方括号符号用于指定一组字符中的任一字符。例如,要匹配以“t”开头且以“n”结尾,中间只能是元音字母的单词,可以使用“t[aeiou]n”。这样就只会匹配“tan”、“ten”、“tin”、“ton”。 **示例:** ```java String regex = "t[aeiou]n"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher("ten"); if (matcher.find()) { System.out.println("Matched: " + matcher.group()); } ``` ##### 1.3 “或”符号 (`|`) “或”符号(`|`)用于匹配多个选项中的任意一个。例如,要匹配“toon”或者前面提到的以“t”开头且以“n”结尾,中间是元音字母的单词,可以使用“t(a|e|i|o|oo)n”。这里需要注意的是,方括号只允许匹配单个字符,而圆括号(`()`)可以用来表示多个字符的选项。 **示例:** ```java String regex = "t(a|e|i|o|oo)n"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher("toon"); if (matcher.find()) { System.out.println("Matched: " + matcher.group()); } ``` ##### 1.4 表示匹配次数的符号 表示匹配次数的符号用来控制前一个字符或表达式的重复次数。常见的有: - `{n}`: 指定前一个字符或表达式恰好出现`n`次。 - `{n,}`: 指定前一个字符或表达式至少出现`n`次。 - `{n,m}`: 指定前一个字符或表达式至少出现`n`次,最多出现`m`次。 **示例:** 匹配美国社会安全号码的格式“999-99-9999”。 ```java String regex = "\\d{3}-\\d{2}-\\d{4}"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher("123-45-6789"); if (matcher.find()) { System.out.println("Matched: " + matcher.group()); } ``` 如果允许连字符可选,则可以使用“?”符号来表示前一个字符或表达式可能出现0次或1次。 ```java String regex = "\\d{3}-?\\d{2}-?\\d{4}"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher("123456789"); if (matcher.find()) { System.out.println("Matched: " + matcher.group()); } ``` ##### 1.5 “否”符号 (`^`) “否”符号用于指定不想要匹配的字符。当用在方括号内时,它表示不想要匹配的字符集。例如,“[^X]”表示匹配除“X”之外的任何字符。 **示例:** ```java String regex = "[^X]"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher("Y"); if (matcher.find()) { System.out.println("Matched: " + matcher.group()); } ``` ##### 1.6 圆括号和空白符号 圆括号用于创建捕获组,可以在匹配后单独获取这部分内容。空白符号(`\s`)用于匹配任何空白字符,包括空格、制表符等。 **示例:** 提取生日日期中的月份部分。 ```java String regex = "(\\w+)\\d{2},\\d{4}"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher("June26,1951"); if (matcher.find()) { System.out.println("Matched month: " + matcher.group(1)); } ``` ##### 1.7 其他符号 还有一些常用的符号简化了某些常见的模式匹配: - `\d`: 匹配任何数字。 - `\D`: 匹配任何非数字。 - `\s`: 匹配任何空白字符。 - `\S`: 匹配任何非空白字符。 - `\w`: 匹配任何字母数字字符。 - `\W`: 匹配任何非字母数字字符。 - `.`: 匹配除换行符之外的任何单个字符。 - `^`: 匹配输入字符串的开始位置。 - `$`: 匹配输入字符串的结束位置。 **示例:** 匹配美国汽车牌照号码,格式为四个数字加两个字母。 ```java String regex = "[0-9]{4}[A-Z]{2}"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher("8836KV"); if (matcher.find()) { System.out.println("Matched: " + matcher.group()); } ``` 通过以上知识点的学习,读者应该对Java中正则表达式的使用有了较为全面的了解。接下来,可以尝试使用这些知识解决实际问题,并进一步探索更多高级特性。
scjwjk
  • 粉丝: 5
  • 资源: 38
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜

最新资源