줄 바꿈을 포함한 모든 문자와 일치하는 정규식


223

"줄 바꿈을 포함한 모든 문자"와 일치하는 정규식이 있습니까?

예를 들어, 아래 정규식에로부터 출력 없기 $2때문에 (.+?)않는 새로운 라인 일치를 포함하지.

$string = "START Curabitur mollis, dolor ut rutrum consequat, arcu nisl ultrices diam, adipiscing aliquam ipsum metus id velit. Aenean vestibulum gravida felis, quis bibendum nisl euismod ut. 

Nunc at orci sed quam pharetra congue. Nulla a justo vitae diam eleifend dictum. Maecenas egestas ipsum elementum dui sollicitudin tempus. Donec bibendum cursus nisi, vitae convallis ante ornare a. Curabitur libero lorem, semper sit amet cursus at, cursus id purus. Cras varius metus eu diam vulputate vel elementum mauris tempor. 

Morbi tristique interdum libero, eu pulvinar elit fringilla vel. Curabitur fringilla bibendum urna, ullamcorper placerat quam fermentum id. Nunc aliquam, nunc sit amet bibendum lacinia, magna massa auctor enim, nec dictum sapien eros in arcu. 

Pellentesque viverra ullamcorper lectus, a facilisis ipsum tempus et. Nulla mi enim, interdum at imperdiet eget, bibendum nec END";

$string =~ /(START)(.+?)(END)/;

print $2;

1
다음과 같은 정규식 수정 자 / 플래그에 대해 읽을 수 있습니다 : m, s (m / regex / ims ...)
snoofkin

답변:


194

줄 바꿈과 일치 하도록 s수정자를 정규식에 추가하십시오 ..

$string =~ /(START)(.+?)(END)/s;

32
JavaScript에서 : (START) [\ s \ S] * (END)-테스트하려면 www.regexpal.com 참조
Zymotik

1
@Zymotik의 의견에 대한 자세한 내용은 다음을 참조하십시오. stackoverflow.com/questions/1068280/…
Jacob van Lingen

2
Java에서는 정규 표현식 시작 부분에 인라인 수정 자 (? s)를 사용할 수 있습니다. 예를 들어 'yourPattern'사용 후 줄 바꿈을 포함한 모든 문자를 바꾸려면 다음을 "(?s)yourPattern.*"참조하십시오. rexegg.com/regex-modifiers.html#dotall
LukeSolar

루비에서 수정은 m하지 s. 참조 : rubular.com을
존 슈나이더

312

/s정규식 수정자를 추가하지 않으려는 경우 (아마도 .정규식의 다른 곳에서 원래 의미를 유지 하려는 경우) 문자 클래스를 사용할 수도 있습니다. 한 가지 가능성 :

[\S\s]

공백이 아니거나 공백 인 문자 다시 말해서, 어떤 캐릭터.

다음과 같이 정규 표현식의 작은 부분에서 수정자를 로컬로 변경할 수도 있습니다.

(?s:.)

2
+1 (?s:.)구문을 직접 작성 하려고했습니다 .
BoltClock

(?:.|\n)덜 우아한 것을 제외하고는 어떤 식 으로든 열등?
Vlastimil Ovčáčík

([\S\s]+)내가 찾던 것입니다. 감사. +1
Ryan

@ VlastimilOvčáčík 그 중 하나를 사용하면 *또는 +길이 n의 주어진 문자열과 일치 할 수있는 다른 방법이 있기 때문에 런타임에 실제로 나쁠 수 있습니다 .
Radon Rosborough

8

그래, 당신은 단지 .개행 을 일치 시켜야합니다 :

$string =~ /(START)(.+?)(END)/s;

-5

"여러 줄"을 사용하려고합니다.

$string =~ /(START)(.+?)(END)/m;

6
아니, m에 영향을 미치는 ^$앵커를하지만 ..
BoltClock

재미 있네요 나는 OP가 요구하는 것을 정확하게하려고하지 않았다고 생각합니다.
nadime
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.