2010-12-28 2 views

답변

34

기본적으로 .은 줄 바꿈과 일치하지 않습니다. [\s\S]은 그 문제를 둘러싼 해킹입니다.
이것은 JavaScript에서 일반적이지만 PHP에서는 /s 플래그를 사용하여 모든 문자와 일치하는 점을 만들 수 있습니다.

+0

항상's' 수정 자 ... – BoltClock

+0

언제'.'가 새 줄과 일치합니까? – yoyo

+0

@BoltClock - 고마워, 방금 PHP로 끝났어요. – Kobi

15

. 메타 문자는 개행을 제외한 모든 문자와 일치합니다. 따라서 일치하는 데 사용되는 .* 패턴은 줄 바꿈과 잘 일치해야하는 경우 작동하지 않습니다. 줄 바꿈을 포함한 모든 캐릭터가 너무 [\d\D], [\w\W]공백 문자와 공백이 아닌 문자의 문자 클래스는

preg_match('/^.*$/',"hello\nworld"); // returns 0 

[\s\S] 일치합니다. 따라서 귀하의 패턴 [\s\S]*은 이제 어떤 것과도 일치합니다.

preg_match('/^[\s\S]$/s',"hello\nworld"); // returns 1 

대안

은 (줄 바꿈 포함) . 일치 무엇을 s 수정을 사용하는 것입니다. s 모드를 온 및 오프하는 경우 (?-s)

preg_match('/^(?s).*(?-s)$/',"hello\nworld"); // returns 1 

(?s) : 인 라이닝로를 s 개질제를 사용

preg_match('/^.*$/s',"hello\nworld"); // returns 1 

다른 방법이다. 일단 꺼지면 .은 개행과 일치하지 않습니다.

+0

마지막 비트는 인접한'.'의 동작 만 수정합니까? 나는 그 구문을 전에 보지 못했습니다. – BoltClock

+0

@BoltClock - 플래그를 인라인으로 설정하거나 지울 수 있습니다. 모든 점에 대해 지울 때까지 작동합니다 :'(? smi). * abc (? - smi). * aBc' – Kobi

+0

@Kobi : 아, 정말 멋집니다! – BoltClock

1

[\s\S] 줄 바꿈을 포함한 모든 문자와 일치하는 문자 집합입니다.

. 줄 바꿈을 제외한 모든 문자와 일치합니다.