2007-07-30

Java rexexp Pattern

关键字: use Pattern
匹配一个6位长度的code,
要求如下:
// first pos: A-Z but not 'O' [A-N|P-Z]{1}[1-9]{4}
// second pos: 1-9 第2位为阿拉伯数字1-9
//third to fifth: 0-9 第3-5位为三位阿拉伯数字不满三位的前面补零,

关于长度我门可以使用^ 开始,$结尾来约束:
final String patStr = "^[A-N|P-Z]{1}[1-9]{1}[0-9]{3}$";
使用这个regexp表达试,后三位可以是000,如果最后以为不能为0则需要使用:
final String patStr = "^[A-N|P-Z]{1}[1-9]{1}[0-9]{2}[1-9]{1}$"

在程序上我们可以借助matcher 和find方法来验证是否合法:
public boolean validateCode(String str1){
if(StringUtils.isEmpty()){
return false
}
return Pattern.compile(patStr).matcher(str1).find();
}

这里需要注意的是使用matcher方法时如果传递进来的str1为null则会报NullPointer异常,这是需要注意的地方。
  • regdemo.zip (1.5 KB)
  • 描述: 简单的例子,包含了使用 oro 替换字符穿的实现以及基本的测试
  • 下载次数: 2
评论
anweixiao 2007-11-03
补充使用ORO实现恰好的关键:
如果在定义正则表达式的时候如果要涉及到“恰好”的限制,^和$将会很有帮助:
比如:
检测一个字符串恰好有0或者一个0-1的数字组成;
检测一个字符串恰好有a-z的字符组成,长度不能超过10
象这样的要求我们可以使用^you need$来定义一个明确的以什么开始,以及什么结束的规则来做限制:
^\\d+$ 可以匹配"","1","3",但不匹配"11","1a";
^[a-z]{1,10}$ 可以匹配"a","abcdefghij";但不匹配"123";
发表评论

您还没有登录,请登录后发表评论