2017-12-06 10 views
1

그래서 나는 m 수정 ..레그 일치 한 줄

하지만 가끔은 추가이 패턴 .. 일치하는 여러 라인을 교차하지 않아야합니다 (성냥에있는 개행 문자가 아니어야합니다)가 성냥에 \n가있다. 이것을 방지하는 방법?

preg_match_all('/(?<!\d|\d\D)(?:dk)?([\d\PL]{8,})/m', $input, $matches, PREG_PATTERN_ORDER); 
+0

'\ D'와'\ PL'는 공백 문자와 일치합니다. 사실, 소비 패턴의 일부이므로'\ PL' 때문에'\ n'을 얻습니다. '[\ d \ PL]'='\ PL'에 주목하십시오. –

+0

NB :'m' 수식어는 당신의 검색과 무관합니다. ('^ [\ d \ PL] {8,})'을'([^ \ pL \ r \ n] – trincot

+0

불가능한 경우가 아니라면 \ n을 (를) 폭발시키고 각 배열 항목을 foreach 할 수 있습니다. – Andreas

답변

0

\PL 패턴은 어떤 문자하지만 유니 코드 문자를 일치하고 또한 자리 공백 문자와 일치합니다. 그래서, [\d\PL]\PL 단축 할 수 있고, 당신이 그것에서 줄 바꿈을 뺄 필요가 있기 때문에, 역 속기 문자 클래스 (\pL)로 교체하고 부정 브라켓 표현, [^\pL] 내부에 그것을 사용하고, \r를 추가하고이 \n :

그것은 단지 ^$ 앵커의 동작을 재정의하기 때문에
'/(?<!\d|\d\D)(?:dk)?([^\pL\r\n]{8,})/u' 

m 수정은 중복입니다. 유니 코드 속성 클래스가 PHP/PCRE의 유니 코드 문자열로 안전하게 작동하려면 u 수정자가 필요합니다. ASCII 숫자 만 일치 시키려면 \d[0-9]\D에서 [^0-9]으로 변경하십시오.