Java提供了一些有用的字符类,如\d
和\w
。我可以定义自己的角色类吗?例如,能够为[A-Za-z_]
等字符类定义缩写是很有用的。
答案 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)
我假设您正在谈论在正则表达式中使用这些自定义快捷方式?如果是这样,答案是否定的,除非你编写自己的正则表达式解析器(这是你不想做的事情)。这些快捷方式是预定义规范的一部分,无法更改。