Java正则表达式匹配不按预期工作

时间:2017-03-02 04:20:43

标签: java regex string replaceall

我有一个字符串:

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,

基本上它应该匹配到最后"," (我的意思是它应该匹配到最后","对于键的值#34; msg")。我尝试在(,)之后放一些正则表达式。但它不起作用。任何有关这方面的帮助将非常感激。

2 个答案:

答案 0 :(得分:3)

问题是,您要通过在?中添加(.+?)来尽可能匹配最小字符。尝试删除它。

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

此外,你提到你要匹配到最后,所以它应匹配到

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

直到

msg=Event yyuyu, test 1,
正如你在问题中指出的那样

请参阅此https://regex101.com/r/BCNsTt/1

答案 1 :(得分:0)

如果您希望匹配到示例中的下一个属性(usrPicture),而不是您的问题,那么您可以尝试以下正则表达式

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

替换为$1...$3$4

输出:

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

可以找到演示here