Java中的正则表达式(附带实例)
正则表达式通过指定一个字符串匹配机制来匹配符合条件的字符串。
假设程序需要在接收客户端传来的手机号码后,判断这个手机号码字符串是否是一个有效的手机号码格式,就需要设定一个匹配机制。例如,这个字符串的长度必须是 11 位且第二位字符不能是 2,若匹配国际手机号码,可能还需要匹配国家代码。
正则表达式提供了精确的规则描述语法,用以判定合法的匹配。String.matches() 这个方法主要用于返回是否匹配指定的字符串,如果匹配则为 true,反之为 false。这个方法的参数需要传递一条正则表达式。
正则表达式在程序中的应用非常广泛,例如:
【实例 1】匹配 6 位数字:
【实例 2】匹配至少 6 位字符:
【实例 3】匹配以 0 开头的任意长度数字:
【实例 4】匹配由 26 个英文字母组成的字符串,不区分大写与小写:
【实例】以手机号码校验为例,为了校验用户输入的手机号码格式是否正确:“第一位数字为1且第二位数字不能为2,长度为11”。使用 Pattern 类以完善校验逻辑,代码如下:
【实例】想要判断内容是否为正负数,它的正则表达式为 [+-]?\\d+,使用 matches() 完成逻辑校验,代码如下:
假设程序需要在接收客户端传来的手机号码后,判断这个手机号码字符串是否是一个有效的手机号码格式,就需要设定一个匹配机制。例如,这个字符串的长度必须是 11 位且第二位字符不能是 2,若匹配国际手机号码,可能还需要匹配国家代码。
正则表达式提供了精确的规则描述语法,用以判定合法的匹配。String.matches() 这个方法主要用于返回是否匹配指定的字符串,如果匹配则为 true,反之为 false。这个方法的参数需要传递一条正则表达式。
正则表达式在程序中的应用非常广泛,例如:
- 表单信息输入校验;
- 文本内容搜索与替换;
- 配置文件内容校验;
- 从网页抓取信息;
- ……
正则表达式的语法
在正则表达式中,除去一些具有特殊意义的保留字符外,其他字符都表示字符本身:. * + ? { | ( [ \ ^ $常用保留字符的意义,如下表所示:
保留字符 | 意义 |
---|---|
. | 匹配任意单个字符 |
* | 表示前面的表达式可以出现 0 次或多次 |
+ | 表示前面的表达式可以出现 1 次或多次 |
? | 表示前面的表达式可以出现 0 次或 1 次 |
{n} | 用于指定匹配次数的保留字符 |
| | 表示或者,即两项规则中满足任意一项 |
() | 表示匹配括号中的全部字符 |
[] | 表示匹配括号中的任意一个字符,用于范围描述 |
\ | 转义字符,对保留字符的匹配都需要转义 |
^ | 表示匹配字符串的开始位置。若在保留字符[]内,出现在开头位置,则将取反字符集的匹配 |
$ | 表示匹配字符串的结束位置 |
\d 与 \D | 匹配数字 |
\w 与 \W | 匹配字符,[a-zA-Z0-9_] |
\s 与 \S | 匹配空白字符 |
【实例 1】匹配 6 位数字:
\d{6}
【实例 2】匹配至少 6 位字符:
\w{6,}
【实例 3】匹配以 0 开头的任意长度数字:
0[0-9]*
【实例 4】匹配由 26 个英文字母组成的字符串,不区分大写与小写:
[A-Za-z]+
Java正则表达式的使用
除 String 类的 matches() 方法外,正则表达式通常结合使用 Pattern 类或 Matcher 类来实现一个完整的逻辑。1) Pattern类
java.util.regex.Pattern 类私有化了构造方法,这意味着创建一个 pattern 对象只能调用其公有的静态方法,如 matches()、compile() 等。【实例】以手机号码校验为例,为了校验用户输入的手机号码格式是否正确:“第一位数字为1且第二位数字不能为2,长度为11”。使用 Pattern 类以完善校验逻辑,代码如下:
import java.util.regex.Pattern; public class RegxDemo { public static void main(String[] args) { String phone = "130****3876"; // 用户定义的手机号码 String regex = "1[3-9]\\d{9}"; // 正则表达式的规则 boolean matches = Pattern.matches(regex, phone); System.out.println(matches); } }程序运行结果为:
true
在上述代码中,matches() 的第一个参数为正则表达式,第二个参数为要校验的手机号码字符串,返回一个 boolean 类型的结果,true 表示匹配成功,反之表示匹配失败。对于其他的正则表达式使用方法,可以查阅 Java API 在线文档。2) Matcher类
java.util.regex.Matcher 类提供了字符串的索引、查找及替换功能。Matcher 类与 Pattern 类一样,也没有公有构造方法,需要调用 Pattern 对象的 matcher() 方法来获得一个 Matcher 对象。【实例】想要判断内容是否为正负数,它的正则表达式为 [+-]?\\d+,使用 matches() 完成逻辑校验,代码如下:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegxDemo { public static void main(String[] args) { String regex = "[+-]?\\d+"; // 正则表达式 Matcher matcher = Pattern.compile(regex) .matcher("-35"); // 得到Matcher对象 boolean result = matcher.matches(); // 得到匹配结果 System.out.println(result); } }程序运行结果为:
true
在上述代码中,matches() 返回一个与正则表达式规则匹配的 boolean 结果。如果需要了解其他的常用方法,可以查阅 Java API 在线文档。