Java正则表达式括号内容匹配

工做中碰到的一些问题与解决方法记录下来以备不时之需正则表达式

商品品名规定英文括号正则表达式拆分规则spa

.*?  :全部内容code

[1-9] :整数数字1到9blog

\d :0到9io

\d**表示可跟多个数字class

\. :小数点方法

\.? :?表示无小数点或有小数点英文

 

规则是要根据英文括号"()"来把品名拆分多行,不免品名中会包含括号在内,容易混淆匹配规则注释

 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 }       

 

代码中注释的那一行只能匹配英文括号中全部内容,可是“大苹果”这个商品被分红两行了,由于前面英文括号的内容也在匹配范围内。di

输出为:

小苹果(1)
(1富士康品种)
大苹果(2)
(2苹果梨)梨(1)

 

String pattern = "(.*?)\\([1-9]\\d*\\.?\\d*\\)"

这行代码能够达到要求,输出为:

小苹果(1)(1富士康品种)大苹果(2)(2苹果梨)梨(1)

相关文章
相关标签/搜索