我不是没有任何代码的问题的 friend ,但我完全不知道如何搜索这个问题。
我得到了一个带有一对键/值对的字符串:test=39&test2=4&test3=10
和更新字符串,如 test2=5
现在我想用一个表达式调用 String.replaceAll
方法,用 test2=5
替换上面的字符串,所以我得到 test=39&test2=5&test3 =10
String lTest = "test=39&test2=4&test3=10";
String lUpdate = "test2=5";
Assert.assertEquals("test=39&test2=5&test3=10",lTest.replace(lTest,???regex???);
lUpdate
可以是test
或test2
或test3
。 = 后面的值可以是 0 到 1000 之间的数字。
我如何使用正则表达式来管理它?
非常感谢您的帮助。
更新!!! 这就像一个魅力(thx to user laune):
@Test
public void test(){
String lResult = update("test1=1234&test2=4949&test3=1", "test2=42");
assertEquals("test1=1234&test2=42&test3=1", lResult);
lResult = update("test1=1234&test2=4949&test3=1", "test3=5");
assertEquals("test1=1234&test2=4949&test3=5", lResult);
lResult = update("test1=1234&test2=4949&test3=1", "test1=100");
assertEquals("test1=100&test2=4949&test3=1", lResult);
}
static String update(String str, String upd) {
// split to get the keyword and the value
String[] kwv = upd.split("=");
// compose the regex
String regex = "(?<=^|&)" + Pattern.quote(kwv[0]) + "=\\d+";
return str.replaceAll(regex, upd);
}
最佳答案
正则表达式应该从更新字符串构造。我使用否定后视,这样即使是带有嵌入式连字符的关键字也能起作用。
static String update( String str, String upd ){
// split to get the keyword and the value
String[] kwv = upd.split( "=" );
// compose the regex
String regex = "(?<=^|&)" + Pattern.quote(kwv[0]) + "=\\d+";
return str.replaceAll( regex, upd );
}
关于java - 正则表达式从 founded 关键字替换为 next &,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28286071/