Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java replaceall在最后一个子字符串之后剪切所有内容_Java_Regex - Fatal编程技术网

java replaceall在最后一个子字符串之后剪切所有内容

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 为什么

我有一个名为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

为什么绳子的其余部分消失了

由于条件
[^&]*
基本上一直搜索到找到
&
字符,其余字符消失

您也可以使用此选项:

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);

控制台日志(结果)您的问题是您正在匹配贪婪(这是默认行为)。由于字符串中有另一个
^
[^&]*\\^
将消耗所有内容(包括
^
),直到它找不到另一个
^
。您可以通过在
*
[^&]*?
中添加问号来关闭贪婪行为。如果您使用它,它将不会匹配贪婪,但它将很高兴找到下面的第一个
^

您的问题是您正在匹配贪婪(这是默认行为)。由于字符串中有另一个
^
[^&]*\\^
将消耗所有内容(包括
^
),直到它找不到另一个
^
。您可以通过在
*
[^&]*?
中添加问号来关闭贪婪行为。如果您使用它,它将不会匹配贪婪,但它将很高兴找到下面的第一个
^