【java正则表达式语法大全】在Java编程中,正则表达式(Regular Expression)是一种强大的工具,用于匹配、查找、替换和处理字符串。Java通过`java.util.regex`包提供了对正则表达式的支持,主要涉及两个类:`Pattern`和`Matcher`。掌握正则表达式的语法对于提高字符串处理能力非常关键。
以下是对Java正则表达式常用语法的总结,便于快速查阅和使用。
一、基本语法说明
正则表达式符号 | 含义 | 示例 |
`.` | 匹配任意单个字符(除了换行符) | `a.c` 匹配 "abc", "aac" 等 |
`\d` | 匹配一个数字(0-9) | `\d{3}` 匹配 "123" |
`\D` | 匹配一个非数字字符 | `\D+` 匹配 "abc" |
`\s` | 匹配一个空白字符(空格、制表符、换行等) | `"a\s+b"` 匹配 "a b" |
`\S` | 匹配一个非空白字符 | `"a\S+b"` 匹配 "a1b" |
`\w` | 匹配一个单词字符(字母、数字、下划线) | `\w+` 匹配 "hello123" |
`\W` | 匹配一个非单词字符 | `\W+` 匹配 " !@" |
`^` | 匹配字符串的开头 | `^a` 匹配以 "a" 开头的字符串 |
`$` | 匹配字符串的结尾 | `b$` 匹配以 "b" 结尾的字符串 |
`` | 前面的元素出现0次或多次 | `a` 匹配 "", "a", "aa" |
`+` | 前面的元素出现1次或多次 | `a+` 匹配 "a", "aa" |
`?` | 前面的元素出现0次或1次 | `a?` 匹配 "", "a" |
`{n}` | 前面的元素恰好出现n次 | `a{3}` 匹配 "aaa" |
`{n,}` | 前面的元素至少出现n次 | `a{2,}` 匹配 "aa", "aaa" |
`{n,m}` | 前面的元素出现n到m次 | `a{2,4}` 匹配 "aa", "aaa", "aaaa" |
二、字符类与范围匹配
正则表达式符号 | 含义 | 示例 |
`[abc]` | 匹配其中任意一个字符 | `[abc]` 匹配 "a", "b", "c" |
`[^abc]` | 匹配除这些字符外的任意字符 | `[^abc]` 匹配 "d", "e" |
`[a-z]` | 匹配小写字母 | `[a-z]` 匹配 "a", "z" |
`[A-Z]` | 匹配大写字母 | `[A-Z]` 匹配 "A", "Z" |
`[0-9]` | 匹配数字 | `[0-9]` 匹配 "0", "9" |
`[a-zA-Z0-9]` | 匹配字母和数字 | `[a-zA-Z0-9]` 匹配 "a", "Z", "5" |
三、分组与捕获
正则表达式符号 | 含义 | 示例 |
`( )` | 分组,用于捕获子表达式 | `(ab)+` 匹配 "ab", "abab" |
`(?i)` | 忽略大小写 | `(?i)hello` 匹配 "HELLO", "Hello" |
`(?m)` | 多行模式,`^` 和 `$` 匹配每行的开始和结束 | `(?m)^start` 匹配每行开头为 "start" 的情况 |
`(?s)` | 单行模式,`.` 匹配包括换行符 | `(?s).+` 匹配整段文本(包括换行) |
四、预查与反向引用
正则表达式符号 | 含义 | 示例 |
`(?=...)` | 正向先行断言,匹配后面的内容 | `x(?=y)` 匹配 "xy" 中的 "x" |
`(?!...)` | 负向先行断言,不匹配后面的内容 | `x(?!y)` 匹配 "xz" 中的 "x" |
`(?<=...)` | 正向后发断言,匹配前面的内容 | `(?<=x)y` 匹配 "xy" 中的 "y" |
`(? | 负向后发断言,不匹配前面的内容 | `(? |
`\1`, `\2` | 反向引用,引用前面捕获的分组 | `(a)\1` 匹配 "aa" |
五、常用方法
方法 | 功能 | 示例 |
`Pattern.compile()` | 将正则表达式编译为Pattern对象 | `Pattern p = Pattern.compile("a+b");` |
`Matcher.matches()` | 检查整个字符串是否匹配正则表达式 | `Matcher m = p.matcher("aaab"); m.matches();` |
`Matcher.find()` | 查找下一个匹配项 | `m.find();` |
`Matcher.group()` | 获取匹配的子串 | `m.group();` |
`String.replaceAll()` | 替换所有匹配项 | `"abc".replaceAll("a", "x");` 返回 "xbc" |
`String.split()` | 按照正则表达式分割字符串 | `"a,b,c".split(",");` 返回 ["a", "b", "c"] |
六、注意事项
- Java中的正则表达式使用的是Java正则表达式引擎,与标准正则表达式略有不同。
- 注意转义字符的使用,如`\`在Java字符串中需要写成`\\`。
- 使用`Pattern.CASE_INSENSITIVE`标志可以实现不区分大小写的匹配。
- 对于复杂的匹配逻辑,建议使用在线正则表达式测试工具进行验证。
通过掌握以上正则表达式语法,开发者可以更高效地处理字符串操作,提升代码的灵活性和可维护性。在实际开发中,合理使用正则表达式能够显著提高程序的效率和健壮性。