2013-11-14 5 views
1

아래 정규식은 # 문자로 시작하지 않는 줄과 일치해야합니다. 정규식과 새 줄이 일치하지 않습니다.

^[^#].* 

그러나 그 다음 줄을 일치 전에 버퍼가 빈 줄이 포함 된 경우는 #로 시작하는 경우에도

. 다음과 같은 입력에 대한

그것은 당신이 이런 식으로 문제를 해결할 수

This line is matched as expected 

# this line should not be matched, but it does if the above line is empty !? 
+1

주, 질문의 요약 오해의 소지가있다. 이맥스 매뉴얼 (정규 표현식) :'. ' (마침표)는 개행 **을 제외한 모든 단일 문자 **에 일치하는 특수 문자입니다. Sniffer의 대답은 실제 문제가 무엇인지 알려줍니다. – Tobias

+1

소스 코드 파일의 주석을 건너 뛰려면 다른 방법이 있습니다. 특히'(eq (구문 -ppss- 문맥 (구문 -ppss)) '주석)'은 그러한 경우를위한 당신의 친구입니다. 이 양식이 true로 평가되면 검색 결과를 건너 뛸 수 있습니다 (예 : 발견 된 일치 항목을 악용하지 않고 계속 검색). – Tobias

+2

정규 표현식'^ [^ #]. *'은 위험 할 수 있습니다. 텍스트 파일에 regexp 엔진 내부에서 오버 플로우가 발생할 수있는 매우 긴 행이있는 경우. 또한 검색 속도를 크게 저하시킬 수 있습니다. '? #'로 시작하지 않는 다음 줄을 찾아서 실제로 찾던 정규 표현식 ('. *')을 사용하지 않고 줄 끝까지 검색을 제한하는 것이 더 좋습니다. – Tobias

답변

2

실패 :

^[^#\r\n].* 

원래 표현 ^[^#].*의 문제는 [^#]가 개행 문자 (빈 일치하고 있다는 점이다 줄), 따라서 도트 .이 빈 줄 다음에 전체 줄과 일치하므로 도트가 실제로 줄 바꿈과 일치하지 않으므로 [^#] 그것을하는 사람입니다.

Regex101 Demo

관련 문제