[regex] EOF와 일치하는 정규식
다음과 같은 데이터가 있습니다.
john, dave, chris
rick, sam, bob
joe, milt, paul
이름을 일치시키기 위해이 정규식을 사용하고 있습니다.
/(\w.+?)(\r\n|\n|,)/
이는 대부분의 작동하지만 파일의 끝이 갑자기 마지막 값을 의미하는 마지막 단어에서 끝나지 않는다 후 \r\n
, \n
또는 ,
이 EOF로 끝납니다. 두 번째 그룹에 바로 넣을 수 있도록 정규식에서 EOF를 일치시키는 방법이 있습니까?
답변
이 질문에 대한 대답은 \Z
그것을 알아내는 데 시간이 걸리지 만 지금은 작동합니다. 반대로, \A
전체 문자열 의 시작 ^
과 $
일치합니다 (한 줄의 시작 과 반대로 일치 함).
답변
EOF는 실제로 문자가 아닙니다. 여러 줄의 문자열이있는 경우 ‘$’는 문자열의 끝과 줄의 끝과 일치합니다.
펄과 그 형제에서 \A
와 \Z
완전히 행 구분을 무시하고 문자열의 시작과 끝을 일치합니다.
POSIX의 정규 표현식에 사용하는 GNU 확장 \`
과 \'
같은 것들에 대한.
답변
Visual Studio에서 다음과 같이 EOF를 찾을 수 있습니다 $(?![\r\n])
.. 이것은 줄 끝이 CR, CRLF 또는 LF인지 여부에 관계없이 작동합니다.
보너스로 모든 코드 파일에 다음과 같은 최종 줄 바꿈 마커가 있는지 확인할 수 있습니다.
Find What: (?<![\r\n])$(?![\r\n])
Replace With: \r\n
Use Regular Expressions: checked
Look at these file types: *.cs, *.cshtml, *.js
작동 원리 :
앞에 CR 또는 LF가없고 뒤에 CR 또는 LF가없는 행 끝 (폭이 0 인 일치)을 찾으십시오. 이것이 작동하는 이유를 보여줄 생각이 있습니다!
CR, LF 또는 CRLF 등 원하는 줄 끝 문자로 교체해야합니다.
답변
Ryan이 제안한 \ Z의 동작을 \ z와 대조하십시오.
$ perl -we 'my $ corpus = "안녕하세요 \ n"; $ corpus = ~ s / \ Z / world / g; print ( ": $ corpus : \ n") ' : helloworld 세계: $ perl -we 'my $ corpus = "안녕하세요 \ n"; $ corpus = ~ s / \ z / world / g; print ( ": $ corpus : \ n") ' :여보세요 세계: $
Perlre sez :
\ Z 문자열의 끝 또는 끝의 개행 이전에만 일치 \ z 문자열의 끝에서만 일치
테스트 케이스를 Ruby (1.8.7, 1.9.2)로 변환하는 것은 동일하게 작동합니다.
답변
정말 줄 구분 기호를 캡처해야합니까? 그렇지 않은 경우이 정규식 만 있으면됩니다.
/\w+/
일치하려는 모든 하위 문자열이 예제와 같이 전적으로 단어 문자로 구성되어 있다고 가정합니다.
답변
(\ r \ n | \ n) 대신 $ (EOL / EOF)를 시도 하시겠습니까?
/\"(.+?)\".+?(\w.+?)$/
답변
최근에 나는 이와 같은 것을 찾고 있었지만 JavaScript를 찾고 있었다.
여기에두면 같은 문제가있는 사람은 누구나 혜택을받을 수 있습니다.
var matchEndOfInput = /$(?![\r\n])/gm;
기본적으로 이것은 캐리지 리턴이나 줄 바꾸기 문자가 뒤 따르지 않는 줄의 끝과 일치합니다. 본질적으로 이것은 \Z
JavaScript 와 동일 합니다.