捕获部分字符串

时间:2012-10-17 23:30:38

标签: java

我想捕获字符串的一部分,我知道它涉及子字符串,正则表达式和匹配的一些组合,我很难将一个体面的解决方案放在一起。假设我有一段文字:

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

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

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

然后可能是一个str.replace去除训练“]” - 但我希望有一个更优雅的方式这样做。我对正则表达式很新,但是没有成功得到我需要的东西。

提前感谢您的任何帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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