java replaceall在最后一个子字符串之后剪切所有内容
我有一个名为msg的字符串:java replaceall在最后一个子字符串之后剪切所有内容,java,regex,Java,Regex,我有一个名为msg的字符串: A64=20170210^A117=ABCDEF^A192=53012519.72^A193 我想用GHIJK替换A117=和^之间的所有内容 我想要这个 A64=20170210^A117=GHIJK^A192=53012519.72^A193 我试过: msg=msg.replaceAll("A117=[^&]*\\^","A117="+"GHIJK"+"^"); 但是,它返回以下内容: A64=20170210^A117=GHIJK^A 为什么
A64=20170210^A117=ABCDEF^A192=53012519.72^A193
我想用GHIJK
替换A117=
和^
之间的所有内容
我想要这个
A64=20170210^A117=GHIJK^A192=53012519.72^A193
我试过:
msg=msg.replaceAll("A117=[^&]*\\^","A117="+"GHIJK"+"^");
但是,它返回以下内容:
A64=20170210^A117=GHIJK^A
为什么绳子的其余部分消失了 由于条件
[^&]*
基本上一直搜索到找到&
字符,其余字符消失
您也可以使用此选项:
msg=msg.replaceAll("A117=.*?\\^", "A117="+"GHIJK"+"^");
其余字符消失是因为条件
[^&]*
基本上一直搜索到找到&
字符
您也可以使用此选项:
msg=msg.replaceAll("A117=.*?\\^", "A117="+"GHIJK"+"^");
您可以使用
A117=[^\\^]*
A117=[^\\\^]*
:匹配A117=
[^\\^]*
匹配所有内容直到^
字符
System.out.println("A64=20170210^A117=ABCDEF^A192=53012519.72^A193"
.replaceAll("A117=[^\\^]*", "A117=GHIJK"));
输出
A64=20170210^A117=GHIJK^A192=53012519.72^A193
演示
const regex=/A117=[^\^]*/g;
常量str=`A64=20170210^A117=ABCDEF^A192=53012519.72^A193`;
const subst=`A117=GHIJK`;
const result=str.replace(regex,subst);
控制台日志(结果)代码>您可以使用A117=[^\\\^]*
A117=[^\\\^]*
:匹配A117=
[^\\^]*
匹配所有内容直到^
字符
System.out.println("A64=20170210^A117=ABCDEF^A192=53012519.72^A193"
.replaceAll("A117=[^\\^]*", "A117=GHIJK"));
输出
A64=20170210^A117=GHIJK^A192=53012519.72^A193
演示
const regex=/A117=[^\^]*/g;
常量str=`A64=20170210^A117=ABCDEF^A192=53012519.72^A193`;
const subst=`A117=GHIJK`;
const result=str.replace(regex,subst);
控制台日志(结果)代码>您的问题是您正在匹配贪婪(这是默认行为)。由于字符串中有另一个^
,[^&]*\\^
将消耗所有内容(包括^
),直到它找不到另一个^
。您可以通过在*
:[^&]*?
中添加问号来关闭贪婪行为。如果您使用它,它将不会匹配贪婪,但它将很高兴找到下面的第一个^
您的问题是您正在匹配贪婪(这是默认行为)。由于字符串中有另一个^
,[^&]*\\^
将消耗所有内容(包括^
),直到它找不到另一个^
。您可以通过在*
:[^&]*?
中添加问号来关闭贪婪行为。如果您使用它,它将不会匹配贪婪,但它将很高兴找到下面的第一个^