標籤:報文 反向 字串 解析 ring 手寫 成功 開始 運算
最近在做一些支付報文處理工作,需要從各種各樣的報文中提取需要的資訊比如(金額,訂單號。。。),每個渠道報文各式各樣,想要寫一個通用的提取邏輯,於是就回顧javaRegex的用法。當然我們可以自己寫一些演算法,去提取這些欄位,但對於簡單的解析來說,親自手寫演算法有點殺雞用牛刀的感覺,而且Regex完全可以滿足大部分的字元提取需求。好了閑話不多說,先列出Regex的常用文法:
- \:表示下一個字元為特殊含義的字元例如:\d匹配數字
- ^:表示匹配字元開始的位置例如:^#.*:匹配以#開頭的所有字元
- $:表示匹配字元結束位置例如:.*元$:匹配以元為結尾的字元
- .:表示匹配所有字元
- *:表示出現次數為0,或大於0次
- +:表示出現次數為1或大於1次
- ?:表示匹配0次或1次
- {n}:標示與字元剛好匹配n次
- {n,m}:標示至少匹配n次,最多匹配m次
- [xyz]:字元集,匹配字元集中任一字元,例如:[abc] 匹配plan中的a
- [^xyz]:反向字元集,相當與非運算,表示不在字元集中的字元
- (pattern):子運算式,在java中我們自左向右取group: matcher.group(0);
下面列出一些常用的特殊字元及其含義:
- \d:匹配數字,等效於[0-9]
- \D:匹配非數字,等效於[^0-9]
- \n:匹配分行符號
- \r:匹配斷行符號符
- \s:匹配空格或者分行符號或者換頁符,等效於[\f\n\r\t\v]
- \S:匹配任何非Null 字元
- \w:匹配任何字類字元,等效於[a-zA-Z0-9]
- \W:匹配任何非字類字元
為了加深理解與運用,下面列出幾個應用情境:
取出下面字串中的金額:
#支出合計:33筆, 共10.00元
String temp = "#支出合計:33筆, 共10.00元"; Pattern p = Pattern.compile("(\\d+\\.\\d+)"); Matcher matcher = p.matcher(temp); if(matcher.find()){ System.out.println(matcher.group(0)); System.out.println(matcher.group(1)); }
輸出:10.00
發現成功的將報文中的金額識別出來,因此我們只需要將不同結構的報文中含有金額部分輸入,就可以方便的輸出金額了,簡單的萬金油....
java 中的字串處理--Regex