java - 正则表达式从 founded 关键字替换为 next &

标签 java regex

我不是没有任何代码的问题的 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可以是testtest2test3。 = 后面的值可以是 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/

相关文章:

java - 如何在Java中使用正则表达式提取HTML <td>标签数据?

java - StringUtils.isBlank 与正则表达式

java - 异常 - java.lang.NoClassDefFoundError

.net - 替换正则表达式中的多个捕获组

php - .htaccess 多变量重写

java - 对象相等,散列码相等,HashSet 包含一个但不包含另一个---如何?

php - 如何从PHP和cakephp中的YouTube网址获取视频ID

java - Tomcat JDBC连接池的maven坐标是什么?

java - Spring 3.1 命名空间错误组件扫描

java - 二维数组的排列