java 中的字串處理--Regex

來源:互聯網
上載者:User

標籤:報文   反向   字串   解析   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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.