一个字符串中的正则表达式多个不同的值

时间:2017-02-15 18:38:46

标签: java android regex pattern-matching

我需要通过字符串查找所有[]并在其间获取文本并用不同的东西替换它。

例如:

HTTP:\ www.domain.com \ ID = [USER_ID]&安培;记录= [CALL_KEY]&安培;一些其它= [OTHER_STUFF]

现在,我必须对每个单独的密钥进行硬编码并将其替换为值。

private String injectValues(String url) {

    String injected = url.replace("[CALL_KEY]", "123");
    injected = injected.replace("[USER_ID]", "some user ide");
    injected = injected.replace("[OTHER_STUFF]", "somethingElse");

    return injected;

}

我有一堆可以插入的不同值,而不是硬编码[CALL KEY]等,我想动态读取其中的内容并注入值。

我在Objective-C中使用过RegEx enumerateMatchesInString,是否有Android / Java等价物?

我对Pattern进行了修改,但我对此并不了解,以使其能够满足我的需求。

private void injectValues(String url) {

        Pattern pattern = Pattern.compile("[(.+?)]");
        Matcher matcher = pattern.matcher(url);

....///EEEEEHH  how do I get the matches?
         String key = ;//THE VALUE INSIDE THE SQUARE BRACKETS
         String aValue = someMethodToGetTheValueForKey(key);

}

 private String someMethodToGetTheValueForKey(String key){
        return "Something";
    }

2 个答案:

答案 0 :(得分:0)

这就是你所缺少的:

// how do I get the matches?
while(matcher.find()) {
     String key = matcher.group(1); //THE VALUE INSIDE THE SQUARE BRACKETS

此外,您可能需要查看Matcher.appendReplacement文档中的示例代码,并将其作为起点。

答案 1 :(得分:0)

我建议一个非常简单的方法。

如果你可以使用 Apache commons ,你可以这样做:

String s = "id=[USER_ID]&record=[CALL_KEY]&someother=[OTHER_STUFF]";
String[] arrayKeys = StringUtils.substringsBetween(s, "[", "]")

arrayKeys 将包含"之间的键。 []"。然后你应该替换 " [" + arrayKeys [0] +"] "例如,你的价值。