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

Java正则表达式匹配未按预期工作,java,regex,string,replaceall,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 yyuy

我有一根绳子:

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”的值)。我试着在(,)后面放一些正则表达式。但它不起作用。在此方面的任何帮助都将不胜感激

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

 str.replaceAll("(\\smsg=)(.+)(,)", "$1...$3");
此外,您提到要匹配到最后一个
,因此它应该匹配到

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

msg=Event yyuyu, test 1,
如你在问题中所述


请参见此

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

 str.replaceAll("(\\smsg=)(.+)(,)", "$1...$3");
此外,您提到要匹配到最后一个
,因此它应该匹配到

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

msg=Event yyuyu, test 1,
如你在问题中所述


查看此

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

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

替换为
$1…$3$4

输出:

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


可以找到Demo

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

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

替换为
$1…$3$4

输出:

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


可以找到Demo

检查,因为我想要的结果是:msg=..@Tushar根据您的正则表达式匹配,直到:msg=Event yyuyuyu,test 1,usrPicture=您需要使用
$1
\1
提取组1。
usrPicture
是否始终是
msg
之后的下一个属性?检查,因为我希望结果像:msg=..@Tushar,根据您的正则表达式匹配,直到:msg=Event yyuyu,test 1,usrPicture=您需要使用
$1
\1
提取组1。
usrPicture
是否总是
msg
之后的下一个属性?