很难找出为什么这行不通,但我的研究表明它应该行得通。我尝试进行这种逻辑匹配 - 行首有 from: 然后任意数量的字符然后行首已发送:。请查看代码,我认为它会打印找到的匹配项但没有:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test2 {
public static void main(String[] args)
{
Pattern lineDividerGuessMatchPattern = Pattern.compile("(?m)(?i)(^from:)(.*?)(^sent:)");
String testString = "cheese \n"
+ "from: cheese\n"
+ "sent: bacon";
Matcher m = lineDividerGuessMatchPattern.matcher(testString);
if(m.find())
System.out.println("Match found");
}
}
最佳答案
您还需要 (?s)
标志(DOTALL 模式)来使 .
匹配行终止符。这找到一个匹配项:
Pattern lineDividerGuessMatchPattern =
Pattern.compile("(?msi)(^from:)(.*?)(^sent:)");
关于java - 无法弄清楚为什么这个正则表达式不起作用(多行带有 "starts with"限定符的文本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24812770/