IT story

정규식, 여러 줄을 일치시키는 방법?

hot-time 2021. 1. 7. 20:01
반응형

정규식, 여러 줄을 일치시키는 방법?


다음 From에서 Subject끝까지 줄 을 일치 시키려고합니다 .

....
From: XXXXXX 
Date: Tue, 8 Mar 2011 10:52:42 -0800 
To: XXXXXXX
Subject: XXXXXXX
....

지금까지 :

/From:.*Date:.*To:.*Subject/m

그러나 그것은 제목 줄의 끝과 일치하지 않습니다. 추가를 시도 $했지만 효과가 없었습니다.


/m수정자를 사용하여 여러 줄 모드를 활성화 할 수 있으며 (예 : 줄 .바꿈 일치 허용) 을 사용 ?하여 비 탐욕 일치를 수행 할 수 있습니다 .

message = <<-MSG
Random Line 1
Random Line 2
From: person@example.com
Date: 01-01-2011
To: friend@example.com
Subject: This is the subject line
Random Line 3
Random Line 4
MSG

message.match(/(From:.*Subject.*?)\n/m)[1]
=> "From: person@example.com\nDate: 01-01-2011\nTo: friend@example.com\nSubject: This is the subject line"

http://ruby-doc.org/core/Regexp.html을 참조 하고 "multiline mode"와 "greedy by default"를 검색하십시오.


루비를 사용하는 경우 다음을 시도해 볼 수 있습니다.

Regexp.new("some reg", Regexp::MULTILINE)

루비를 사용하지 않는 경우 다음 질문을 해킹하는 것이 좋습니다.

  1. 모든 "\ n"을 SOME_SPECIAL_TOKEN으로 바꿉니다.
  2. 정규 표현식을 검색하고 다른 작업을 수행하십시오.
  3. 복원 : SOME_SPECIAL_TOKEN을 "\ n"으로 바꿉니다.

줄 바꿈을 일치 시키려면 먼저 모든 줄 바꿈 문자를 텍스트에 표시되지 않는 다른 문자 (또는 문자 시퀀스)로 대체하는 것이 좋습니다. 예를 들어, 하나의 문자열 변수에 모든 텍스트가 aString.split("\n").join("|")있는 경우 문자열의 모든 줄 바꿈을 파이프 문자로 바꾸는 것과 같은 작업을 수행 할 수 있습니다 .

또한 정규 표현식에서 개행 문자를 일치시키는 방법에 관한 이전 질문에 대한 Alan Moore의 답변 을 참조하십시오.



시험:

/...^Subject:[^\n]*/m


다음 데이터 사용 :

From: XXXXXX
Date: Tue, 8 Mar 2011 10:52:42 -0800
To: XXXXXXX
Subject: XXXXXXX

다음 정규식이 마법을 수행합니다.

From:([^\r\n]+)[\r\n]+Date:([^\r\n]+)[\r\n]+To:([^\r\n]+)[\r\n]+Subject:([^\r\n]+)[\r\n]+

But I would recommend that you don't try and do this in 1 regex. Push into a regex "^(\w+):(.+)$" line by line, unless you are sure that the sequence of the FROM/DATE/TO/SUBJECT is not going to change ;)

ReferenceURL : https://stackoverflow.com/questions/5239997/regex-how-to-match-multiple-lines

반응형