java编程括号匹配,Java正则表达式括号内容匹配

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

你可能感兴趣的:(java编程括号匹配)