수색…


왜 줄 문자 (.)가 줄 바꿈 문자 ( "\ n")와 일치하지 않습니까?

.* 정규식에서 기본적으로 "입력 끝날 때까지 모든 것을 잡는다"는 의미입니다.

그래서 hello world 와 같은 간단한 문자열의 경우 .* 가 완벽하게 작동합니다. 그러나 파일에 줄을 나타내는 문자열이 있으면이 줄은 유닉스 계열 시스템에서 \n (줄 바꿈)과 같은 줄 구분 기호로 구분 되고 \r\n (캐리지 리턴 및 줄 바꿈)은 Windows.

대부분의 regex 엔진에서는 기본적으로 . 개행 문자와 일치 하지 않으므로논리 행 의 끝에서 일치가 중지됩니다. 원한다면 . 줄 바꿈을 포함하여 모든 것을 실제로 일치 시키려면 정규식 엔진에서 "도트 일치 전체"모드를 re.DOTALL 합니다 (예 : Python의 re.DOTALL 플래그 추가 또는 PCRE의 /s 추가).

정규식은 왜 닫는 대괄호 / 괄호를 건너 뛰고 이후에 일치합니까?

다음 예제를 고려하십시오.

그는 카페 "Dostoevski"에 들어가서 말했다 : "안녕하세요."

여기에 두 세트의 따옴표가 있습니다. 우리가 정규 표현식이 "Dostoevski" "Good evening." "Dostoevski" 에서 일치 할 수 있도록 양쪽을 일치 시키려고한다고 가정 해 봅시다 "Good evening."

처음에는 간단하게 유혹을받을 수 있습니다.

".*"  # matches a quote, then any characters until the next quote

그러나 작동하지 않습니다. "Dostoevski" 의 첫 번째 인용구와 "Good evening." 의 마감일 까지 일치합니다 "Good evening." the and said: the and said: 부분을 ​​포함하여. Regex101 데모

왜 그런 일이 일어 났습니까?

이는 정규 표현식 엔진이 .* 만날 때 맨 끝까지 모든 입력을 "먹는다"때문에 발생 .* . 그런 다음, 최종 일치해야합니다 " . 그래서, 그것은" "첫까지 일치하는 텍스트의 놓아, 경기의 끝에서 떨어져 백업을 " 발견 - 그리고, 물론, 마지막 " 경기 "Good evening." 의 마지막 부분.

이를 방지하고 첫 번째 따옴표와 정확히 일치시키는 방법은 무엇입니까?

사용 [^"]* 은 모든 입력을 먹지 않습니다. - 첫 번째 때까지 " , 필요한 것처럼. Regex101 데모



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow