如何用java中的DOTALL捕获最后一行末尾的所有内容

如何用java中的DOTALL捕获最后一行末尾的所有内容,java,regex,Java,Regex,我有一个字符串,如下所示: Acid Exposure (pH) Total Total Normal Clearance pH : Channel 7 Number of Acid Episodes 26 Time 31.5 min Percent Time 7.4% Mean Acid Clearance Time 73 sec

我有一个字符串,如下所示:

Acid Exposure (pH)      Total
            Total   Normal

        Clearance pH  :  Channel 7
        Number of Acid Episodes 26  
        Time    31.5 min    
        Percent Time    7.4%    
        Mean Acid Clearance Time    73 sec  
        Longest Episode 7.1 min

        Gastric pH  :  Channel 8
        Time pH<4.0 425.9 min



    Bolus Exposure (Impedance)      Total
            Total   Normal

        Acid Time   22.0 min    
        Acid Percent Time   5.2%    
        Nonacid Time    6.1 min 
        Nonacid Percent Time    1.4%    
        All Reflux Time 28.2 min    
        All Reflux Percent Time 6.6%    
        Median Bolus Clearance Time 16 sec  
        Longest Episode 7.8 min
我试图捕捉这一点的方式是:

Pattern my_pattern = Pattern.compile("Acid Exposure.*?Time pH.*?$",Pattern.DOTALL);
但是我没有运气。我还尝试添加了
Pattern.DOTALL | Pattern.MULTILINE
,但也没有运气

您可以使用:

Pattern my_pattern = Pattern.compile("Acid Exposure.*?Time pH<[^\\n]*", Pattern.DOTALL);

Pattern my\u Pattern=Pattern.compile(“酸暴露。*?时间pH也可以在
*?

因此,不需要使用全局“点全部”修改器

酸暴露(?s:.*)时间pH.


而且,出于某种奇怪的原因,
(?s:.*)
比引擎中的
[\s\s]*?
快。

您使用什么方法,
find()
matches()
(?s:)
被称为内联修饰符,
肯定比
[\s\s]
构造快,因为
是“本机的”“匹配所有构造,
[\s\s]
是一个更复杂的“用户定义的”类。我怎样才能做到第二次pH<?你的示例只有一个时间pHI知道。我只是想偷偷地引入一个问题扩展。我真的想问,如果原文中有两个时间pH<,我怎么能从开始匹配到第二个而不是停在第一个呢e第三次
直到第二次。是的,可以有第三次
Pattern my_pattern = Pattern.compile("Acid Exposure.*?Time pH<[^\\n]*", Pattern.DOTALL);