java - 如何在 java 中使用正则表达式提取多行?

标签 java regex

如果我有一堆文本,可以说是 HTML,但不一定是。

</TD> 
<TD CLASS='statusEven'><TABLE BORDER=0 WIDTH='100%' CELLSPACING=0 CELLPADDING=0><TR><TD         ALIGN=LEFT><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0> 
<TR> 
<TD ALIGN=LEFT valign=center CLASS='statusEven'><A HREF='extinfo.cgi?    type=2&host=localhost&service=Current+Load'>Current Load</A></TD></TR> 
</TABLE> 
</TD> 
<TD ALIGN=RIGHT CLASS='statusEven'> 
<TABLE BORDER=0 cellspacing=0 cellpadding=0> 
<TR> 
</TR> 
</TABLE> 
</TD> 
</TR></TABLE></TD> 
<TD CLASS='statusOK'>OK</TD> 
<TD CLASS='statusEven' nowrap>08-04-2011 22:07:00</TD> 
<TD CLASS='statusEven' nowrap>28d 13h 18m 11s</TD> 
<TD CLASS='statusEven'>1/1</TD> 
<TD CLASS='statusEven' valign='center'>OK &#45; load average&#58; 0&#46;01&#44; 0&#46;04&#44; 0&#46;05&nbsp;</TD> 

我想抓取 2 个标记之间的所有内容,结果可能是多行,我该怎么做?

这是我目前所拥有的......

    Pattern p = Pattern.compile("extinfo(.*)load average");
    Matcher m = p.matcher(this.resultHTML);

    if(m.find())
    {
         return m.group(1);
    }

最佳答案

使用 (?s) 开关:

Pattern p = Pattern.compile("(?s)extinfo(.*?)load average")

此开关为正则表达式的其余部分打开“点匹配换行符”,这意味着它基本上将整个输入视为“一行”(换行符只是另一个字符)。

如果没有这个开关,模式将不会跨越换行符边界进行匹配。

此外,您的正则表达式是“贪婪的”,所以我在捕获中添加了 ? 以使其“不贪婪”,这意味着它将捕获足够的数据来进行匹配,但不会更多。

关于java - 如何在 java 中使用正则表达式提取多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6950337/

相关文章:

java - 尝试和理解大型 Java Swing 代码库的最佳方法是什么。

java - 解析数字抛出 : Exception in thread "main" java. lang.NumberFormatException: 对于输入字符串

java - ProcessBuilder 抛出异常 : Arguement contains =

python - 正则表达式匹配单词和字符串结尾

java - Java Xmx 和 Docker 容器 RAM 大小之间还有多少余量?

Java 列表与数组[]。以前的线程说使用列表,我不相信。

regex - 使用正则表达式的 Sed 替换输出

regex - Perl 正则表达式用新行拆分

regex - 如何在 VBScript RegEx 中替换为换行符

regex - 如何在Golang中验证以逗号分隔的字符串?