2

我想捕获字符串的一部分,并且我知道它涉及子字符串、正则表达式和匹配项的某种组合,我很难组合出一个体面的解决方案。假设我有一段文字:

String str = "Lorem ipsum dolor [cookie:firstname] adipiscing elit.";

我想捕获上面 : 和 ] 之间的文本,在这种情况下为“名字”(cookie 名称可以是可变长度)。我想的一种方法是使用拆分:

str = str.split("\\cookie:")[1]");

然后也许是一个 str.replace 来删除培训“]” - 但我希望有一种更优雅的方式来做到这一点。我对正则表达式很陌生,但还没有成功地得到我需要的东西。

提前感谢您的任何帮助。

4

2 回答 2

2

这是一个单行:

String part = str.replaceAll(".*:(.*)].*", "$1");

正则表达式捕获整个输入,将其替换为第一组,该组捕获您想要的部分,有效地只返回您想要的部分。

下面是一些测试代码:

public static void main(String[] args) {
    String str = "Lorem ipsum dolor [cookie:firstname] adipiscing elit.";
    String part = str.replaceAll(".*:(.*)].*", "$1");
    System.out.println(part);
}

输出:

firstname
于 2012-10-17T23:33:19.110 回答
1

您可以尝试以下正则表达式代码:-

    String str = "Lorem ipsum dolor [cookie:firstname] adipiscing elit.";
    Pattern pattern = Pattern.compile(".*?\\[.*?:(.*?)\\].*");
    Matcher matcher = pattern.matcher(str);

    if (matcher.find()){
        System.out.println(matcher.group(1));
    }

输出: -

firstname
于 2012-10-17T23:33:45.357 回答