我需要在两个自定义标头之间找到一个字符串。
下面是我正在使用的字符串,我希望能够在" --- 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 =="我想要的。我没有任何错误或任何错误;它只是没有在控制台中打印任何东西。
我不知道为什么,但使用这个正确的正则表达式代码对我不起作用。这就是我发布此问题的原因,我在本网站上尝试过的解决方案无效。其他答案通常是此代码的变体,或者只是不适用于我的目的。
哦,我不能使用依赖于字符整数位置的字符串拆分。标题之间的字符串长度各不相同,因此程序必须能够适应它。
答案 0 :(得分:3)
你需要告诉模式考虑用于点的linfeed。
Pattern.compile("---BEGIN CGP MESSAGE---(.*?)---BEGIN CGP KEY---", Pattern.DOTALL);
答案 1 :(得分:1)