使用换行符查找字符串中的字符串(\ n)

时间:2015-04-21 16:15:33

标签: java regex string

我需要在两个自定义标头之间找到一个字符串。

下面是我正在使用的字符串,我希望能够在" --- BEGIN CGP MESSAGE --- \ n"之间提取字符串的一部分。 " --- BEGIN CGP KEY --- \ n",或其他任何小标题的东西。

---BEGIN CGP MESSAGE---\n
EoEZ1Qio8/BY/vl9iGblkg==\n
---BEGIN CGP KEY---\n
dOo23Ar23p4v6So70O65E6ImFnzuYrVro3nXFi5s4RUdczLITEDNcUefRiOgyEKWJKR/CW1DeLITPlT7RjV3FQRIz8sIdsW8Zuq9E4u6ad5n+EPxC80IfhdrThJPs/T6yuaVW3s+45mnyGMHvhEatwwkqtJZydfBKz3qb/JUkf0=\n
---END CGP MESSAGE---\n

我看到的每个地方都建议使用正则表达式,并且它经常被格式化(我用他们想要的参数替换了他们使用的示例)

String str = sb.toString();
Pattern pattern = Pattern.compile("---BEGIN CGP MESSAGE---(.*?)---BEGIN CGP KEY---");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(1).toString());
}

(sb是构建上述字符串的字符串构建器。)

不幸的是,当我运行此代码时,它不会打印该行" EoEZ1Qio8 / BY / vl9iGblkg =="我想要的。我没有任何错误或任何错误;它只是没有在控制台中打印任何东西。

我不知道为什么,但使用这个正确的正则表达式代码对我不起作用。这就是我发布此问题的原因,我在本网站上尝试过的解决方案无效。其他答案通常是此代码的变体,或者只是不适用于我的目的。

哦,我不能使用依赖于字符整数位置的字符串拆分。标题之间的字符串长度各不相同,因此程序必须能够适应它。

2 个答案:

答案 0 :(得分:3)

你需要告诉模式考虑用于点的linfeed。

Pattern.compile("---BEGIN CGP MESSAGE---(.*?)---BEGIN CGP KEY---", Pattern.DOTALL);

答案 1 :(得分:1)

您可以添加修饰符(?s)以匹配新行字符:

(?s)---BEGIN CGP MESSAGE---(.*?)---BEGIN CGP KEY---

Demo