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

时间:2011-07-21 11:36:54

标签: java regex customization

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

4 个答案:

答案 0 :(得分: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);
}

比单一模式更具可读性:

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

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

小心模式中的%标志!

答案 1 :(得分:4)

答案 2 :(得分:0)

是和否。是的,因为[]已经是一个字符类。不,您无法定义\w之类的自定义“快捷方式”。一个原因是,它永远不是JAVA的决定。这些字符类在其他地方标准化(POSIX?)。

我的2分:正则表达式本身很复杂。你不应该通过引入更多来混淆自己和他人。

答案 3 :(得分:0)

我假设您正在谈论在正则表达式中使用这些自定义快捷方式?如果是这样,答案是否定的,除非你编写自己的正则表达式解析器(这是你不想做的事情)。这些快捷方式是预定义规范的一部分,无法更改。