工做中碰到的一些問題與解決方法記錄下來以備不時之需正則表達式
商品品名規定英文括號正則表達式拆分規則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)