Java正则表达式括号内容匹配
工作中碰到的一些问题与解决方法记录下来以备不时之需
商品品名规定英文括号正则表达式拆分规则
.*? :所有内容
[1-9] :整数数字1到9
\d :0到9
\d* :*表示可跟多个数字
\. :小数点
\.? :?表示无小数点或有小数点
规则是要根据英文括号"()"来把品名拆分多行,难免品名中会包含括号在内,容易混淆匹配规则
1 String nameInput = "小苹果(1)(1富士康品种)大苹果(2)(2苹果梨)梨(1)";
2 try{
3 //String pattern = "(.*?)\\(.*?\\)";
4 String pattern = "(.*?)\\([1-9]\\d*\\.?\\d*\\)";
5 Pattern r = Pattern.compile(pattern);
6 Matcher m = r.matcher(nameInput);
7 while (m.find()) {
8 System.out.println(m.group(0));
9 }
10 }catch (Exception e){
11 e.printStackTrace();
12 }
代码中注释的那一行只能匹配英文括号中所有内容,但是“大苹果”这个商品被分成两行了,因为前面英文括号的内容也在匹配范围内。
输出为:
小苹果(1)
(1富士康品种)
大苹果(2)
(2苹果梨)梨(1)
String pattern = "(.*?)\\([1-9]\\d*\\.?\\d*\\)"
这行代码可以达到要求,输出为:
小苹果(1)
(1富士康品种)大苹果(2)
(2苹果梨)梨(1)
原文链接:https://www.cnblogs.com/sjzhai/p/13535979.html