我想捕获字符串的一部分,我知道它涉及子字符串,正则表达式和匹配的一些组合,我很难将一个体面的解决方案放在一起。假设我有一段文字:
String str = "Lorem ipsum dolor [cookie:firstname] adipiscing elit.";
我想捕获上面的:和]之间的文本,在这种情况下为“firstname”(cookie名称可以是可变长度)。我认为使用split的一种方法是:
str = str.split("\\cookie:")[1]");
然后可能是一个str.replace去除训练“]” - 但我希望有一个更优雅的方式这样做。我对正则表达式很新,但是没有成功得到我需要的东西。
提前感谢您的任何帮助。
答案 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