2010-03-12 4 views
4

따르면하여 Perl documentation on regexes :Perl 정규식을 사용하여 모든 행의 처음과 일치시킬 수 있습니까?

기본적으로

은 "^"문자가 "^"... 당신은 할 수있다 일치하지 않습니다 문자열 ... 임베디드 뉴 라인의 시작과 일치하도록 보장, 그러나 "^"가 문자열 내에서 새 줄 바꿈 후 과 일치하도록 문자열을 여러 줄 버퍼로 처리하려는 경우 패턴 일치 연산자에서/m 한정자를 사용하여이 작업을 수행 할 수 있습니다.

"새 줄 바꿈"부분은 두 번째 및 후속 줄 시작 부분에서만 일치한다는 것을 의미합니다. 의 시작 부분에 어떤 행 (1 일, 2 일 등)을 매치하려면 어떻게해야합니까?

EDIT : 좋아요, 파일의 시작 부분에 BOM 정보 (3 자)가있는 것 같습니다. 그래서 나를 망쳐 놓은 것 같습니다. 어쨌든 ^와 (과) 일치하는 방법은 없나요?

편집 : 그래서 결국은 (한 더 BOM이 없다로) 작동하지만, 지금은

답변

3

BOM을 보존하려는 경우 /^(?:\xEF\xBB\xBF)?/mg 정규식을 사용하여 줄 시작 부분에 일치시킬 수 있습니다.

+0

나를 설정 한 것 같아요 그게 효과가! (그러나 나는 아직도 코멘트에 더 많은 것들이 필요하다) – JoelFan

3

^가하는 "어떤 줄 바꿈 후"라는부터 펄 문서가 잘못된 것 같다/m 플래그와 함께 1 라인과 일치 :

~:1932$ perl -e '$a="12\n23\n34";$a=~s/^/:/gm;print $a' 
:12 
:23 
:34 

은 BOM과 일치하려면 경기에 포함 할 필요가있다.

~:1939$ perl -e '$a="12\n23\n34";$a=~s/^(\d)/<\1>:/mg;print $a' 
12 
<2>:3 
<3>:4 
~:1940$ perl -e '$a="12\n23\n34";$a=~s/^(?:)?(\d)/<\1>:/mg;print $a' 
<1>:2 
<2>:3 
<3>:4 
+0

파일을 읽을 때 작동하지 않습니다. 내 파일에 숨겨진 것이있을 수 있습니까? – JoelFan

+0

@Joel : 그렇게 생각합니다. BOM 어쩌면? – kennytm

+0

그것은 Visual Studio 파일입니다. 방금 크기를 1 자로 줄였습니다. "dir"은 크기가 4라고 말합니다. 그래서 뭔가 진행되고 있습니다! 또한 "입력"을 할 때 파일의 시작 부분에 3 개의 이상한 문자가 표시됩니다. – JoelFan

1

개념적으로, 문자열의 시작 전에 줄 바꿈이있을 가정한다. 따라서/^ a /는 문자열 시작 부분에 문자 'a'를 찾습니다.

-1

파일의 시작 부분에 빈 줄을 넣고이 멋진 것들을 내려 놓고 regex을 읽기 어렵게 만드십시오.

예, BOM. 파일의 시작 부분에 나타날 수 있으므로 파일의 시작 부분에 공백을 두십시오. BOM\s이 아니거나 맨눈으로 볼 수 있습니다. BOM으로 인해 내 regex이 실패 할 때가 시간을 낭비합니다.

관련 문제