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