(?m)^truck(?:(?:\r\n|[\r\n]).+$)*
이 전체 텍스트를 가정처럼, DOTALL 모드에서 뭔가를 컴파일해야한다고 생각 즉, 당신 파일을 한 줄씩 읽지 않는 경우), 은이 코드와 같이 줄 구분 기호가 항상 \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 :. (?m)
를 제거하고 대신 RegExr이 액션에 의해 구동 multiline
확인란을 선택하기 때문에 규칙이 조금 다른, RegExr에서 그 정규식을 테스트하는 자바 -powered 정규식 테스터를 들어, 체크 아웃. RegexPlanet.) 당신이 라인으로 입력 라인을 읽어해야하는 경우
일을해야합니까? –
@nikita 새 줄을 포함하는 그룹을 만들고 싶기 때문에 – lampShade