java - 无法弄清楚为什么这个正则表达式不起作用(多行带有 "starts with"限定符的文本)

标签 java regex

很难找出为什么这行不通,但我的研究表明它应该行得通。我尝试进行这种逻辑匹配 - 行首有 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/

相关文章:

javascript - 从文本文件中提取 JSON 通用字符串

regex - 尝试在同一个端口设置域和子域。 (NGINX)

java - 如何配置向导页面?

javascript - 如何使用 REGEX 找到字符的一个实例?

java套接字/输出流写入: do they block?

java - 使用 CronTrigger 和 MySQL 做调度器时出现 ClassNotFoundException

Java正则表达式检查字符串包含超过2个单词并且包含数字

javascript - 按条件从字符串的单词中删除后缀

java.lang.AssertionError : Content type not set - Spring Controller Junit Tests 错误

java - 使用 Java 复制目录内容