(?m)^truck(?:(?:\r\n|[\r\n]).+$)*
这是假设整个文本已经被读入一个字符串(例如,你不是逐行读取文件),但它不是不是假定行分隔符始终为\n
,如代码所示。至少应该允许\r\n
和\r
,这也是(?:\r\n|[\r\n])
所做的。但它仍然只匹配一个分隔符,所以匹配在块结束处的双线分隔符之前停止。
一旦你匹配的数据块,你可以上线分隔拆分它来获得各条线。这里有一个例子:
Pattern p0 = Pattern.compile("(?m)^truck(?:(?:\r\n|[\r\n]).+$)*");
Matcher m = p0.matcher(data);
while (m.find())
{
String fullMatch = m.group();
int n = 0;
for (String s : fullMatch.split("\r\n|[\r\n]"))
{
System.out.printf("line %d: %s%n", n++, s);
}
}
输出:
line 0: truck
line 1: zDoug
line 2: Doug's house
line 3: (123) 456-7890
line 4: [email protected]
line 5: 30
line 6: 61234.56
line 7: 8/10/2003
我也假设每行数据包含至少一个字符,并且该数据块之间的空白行真的是空的 - 也就是说,没有空格,TAB或其他不可见字符。
(BTW:为了测试RegExr该正则表达式,除去(?m)
并检查multiline
箱代替RegExr通过的ActionScript供电,所以规则是有点不同的对于的Java -Powered正则表达式测试仪,检查。 RegexPlanet)
如果需要逐行读取输入线,它有什么用正则表达式来呢? – 2011-03-03 03:34:30
@nikita因为我想形成团体,其中包括新线 – lampShade 2011-03-03 03:41:11