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)