1.不易开头、结尾;小数;圆角字符
包含数字、字母、圆角字符
不以<br/>开头、结尾,但中间可以存在
小数中的小数点是半角
正则表达式
"^(?!<br/>)(([0-9]+(.[0-9]+)?)|(<br/>)|[a-zA-Z\u0391-\uffe5])*(?<!<br/>)$"
解析
字母:[a-Z]
圆角字符:[\u0391-\uffe5]
数字:(包含小数):[0-9]+(.[0-9]+)? 这里的?表示有无量词
多个元素并列用| 隔离开
每个单独的元素用()括起来
不以<br/>开头:^(?!<br/>)
不以<br/>结尾:(?<!<br/>)$
测试
@Test public void test2() { String str = "ABCabc中国"; String regEx = "^(?!<br/>)(([0-9]+(.[0-9]+)?)|(<br/>)|[a-zA-Zu0391-uffe5])*(?<!<br/>)$"; Pattern pattern = Pattern.compile(regEx); Matcher matcher = pattern.matcher(str); boolean rs = matcher.matches(); System.out.println(rs); }
true
2.group()
需求:找出连续的大写字母
@Test public void test() { String str = "MABabAcdBCef"; String regEx = "([A-Z]+)"; Pattern pattern = Pattern.compile(regEx); Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(matcher.group(1)); }
输出:
MAB
A
BC
3.如果去掉正则中的()
@Test public void test() { String str = "MABabAcdBCef"; String regEx = "[A-Z]+"; Pattern pattern = Pattern.compile(regEx); Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(matcher.group(1)); } }
结果
java.lang.IndexOutOfBoundsException: No group 1
at java.util.regex.Matcher.group(Matcher.java:538)
正则表达式中以’()’标记的子表达式所匹配的内容就是一个分组(group).