2017-03-02 53 views
0

我有一個字符串:Java的正則表達式匹配工作不正常

String str = "sourceType=Match, msg=Event yyuyu, test 1, usrPicture=null, friendCount=0"; 

現在我寫一個正則表達式爲「MSG」替換值「......」 我正則表達式是這樣的:

str.replaceAll("(\\smsg=)(.+?)(,)", "$1...$3"); 

按我上述正則表達式匹配它,直到:

msg=Event yyuyu, 

但我想它匹配至:

msg=Event yyuyu, test 1, 

基本上它應該匹配到最後一個「,」(這是我的意思是它應該匹配到最後一個「,」爲鍵「msg」的值)。我試圖在(,)之後放置一些正則表達式。但它不起作用。任何對此的幫助將非常感激。

+0

檢查['味精=(。*?),\ S * \ S + ='](https://regex101.com/r/vtevwk/1) – Tushar

+0

由於我想要的結果是:msg = .... –

+0

@Tushar根據你的正則表達式它匹配到:msg =事件yyuyu,測試1,usrPicture = –

回答

3

問題是,您說要通過在(.+?)中添加?來儘可能匹配最小字符。嘗試刪除它。

str.replaceAll("(\\smsg=)(.+)(,)", "$1...$3"); 

另外,你提到要匹配到最後,所以你在你的問題中指定它應該匹配,直到

msg=Event yyuyu, test 1, usrPicture=null, 

不是直到

msg=Event yyuyu, test 1, 

看到這個https://regex101.com/r/BCNsTt/1

0

如果你想匹配,直到下一個屬性(usrPicture)在你的榜樣,而不是你的問題,那麼你可以試試下面的正則表達式

(\smsg=)(.+?)(,)(\s\w+=)

替換$1...$3$4

輸出:

sourceType=Match, msg=..., usrPicture=null, friendCount=0

演示可以發現here