我可以定义自定义字符类缩写吗?

fre*_*low 11 java regex customization

Java提供了一些有用的字符类,如\d\w.我可以定义自己的角色类吗?例如,能够为字符类定义缩写是很有用的[A-Za-z_].

Bar*_*ers 12

我可以定义自己的角色类吗?

不,你不能.

就个人而言,当我有一个(稍微)复杂的正则表达式时,我会在较小的子正则表达式中打破正则表达式,然后将它们"粘合"在一起,String.format(...)如下所示:

public static boolean isValidIP4(String address) {
    String block_0_255 = "(0|[1-9]\\d|2[0-4]\\d|25[0-5])";
    String regex = String.format(
            "%s(\\.%s){3}", 
            block_0_255, block_0_255
    );
    return address.matches(regex);
}
Run Code Online (Sandbox Code Playgroud)

这比单一模式更具可读性:

"(0|[1-9]\\d|2[0-4]\\d|25[0-5])(\\.(0|[1-9]\\d|2[0-4]\\d|25[0-5])){3}"
Run Code Online (Sandbox Code Playgroud)

请注意,这只是一个简单的示例:验证IP地址最好可以通过java.net包中的类来完成,如果您这样做,则应将模式放在方法之外并进行预编译.

小心%你的图案内的标志!

  • 我本人即将提出一些建议.如果需要重复使用它们,可以将这些正则表达式部分保留在某些常量中.有一个+1. (3认同)