(?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