java replaceall删除了最后一个子字符串后的所有内容

时间:2017-02-09 17:33:30

标签: java regex

我有以下名为msg的字符串:

A64=20170210^A117=ABCDEF^A192=53012519.72^A193

我想用A117=替换^GHIJK之间的所有内容。

我想要这个;

A64=20170210^A117=GHIJK^A192=53012519.72^A193

我试过了:

msg=msg.replaceAll("A117=[^&]*\\^","A117="+"GHIJK"+"^");

然而它会返回:

A64=20170210^A117=GHIJK^A

为什么字符串的其余部分会消失。

3 个答案:

答案 0 :(得分:2)

您可以使用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;
const str = `A64=20170210^A117=ABCDEF^A192=53012519.72^A193`;
const subst = `A117=GHIJK`;
const result = str.replace(regex, subst);
console.log(result);




答案 1 :(得分:2)

您的问题是您正在匹配贪婪(这是默认行为)。由于您的字符串中还有另一个^[^&]*\\^将消耗所有内容(包括^ s),直到找不到另一个^。您可以通过在*[^&]*?附加问号来关闭贪婪行为。如果你使用它,它就不会与贪婪相匹敌,但是对于它将要找到的第一个^将会感到满意。

答案 2 :(得分:1)

其余字符因条件[^&]*而消失,基本上会搜索,直到找到&个字符。

您也可以使用它:

msg=msg.replaceAll("A117=.*?\\^", "A117="+"GHIJK"+"^");