2010-04-11 9 views
0

줄 시작 부분과 공백이 두 개인 모든 텍스트의 배경을 변경해야합니다.RegEx (php) - 여러 줄 단위로 줄 바꾸기

$text = preg_replace("|^ (.+)|um", "<div class='special'>$1</div>", $text); 

그러나

line1 
    line2 

<div class='special'>line1</div> 
<div class='special'>line2</div> 
,536로 변환됩니다

text 

는 "<div class='special'>text</div>는"쉽게

가 변환 될 놈이야

<div class='special'>line1 
line2</div> 

이 필요하지만

.

어떻게 달성 할 수 있습니까?

답변

0

<div class='special'>$1</div>

((?:^ [^\r\n]*(?:\R(?= ))?)+) 

교체 : 다음 일치하여 탐욕을 중지

<?PHP 
$text = " 
    Line One 
    Line Two 
    Line Three 
something"; 

$text = preg_replace("|^ (.+)^[^()]|ums", "<div class='special'>$1</div>\n", $text); 


echo $text; 

출력 "줄 바꿈은 두 개의 공백 이외의 뒤에".

그러나 이것은 이것에

line1 
    line2 

변환됩니다 : 당신이 공백을 제거하려면, 텍스트를 일치해야합니다

<div class='special'> line1 
    line2</div> 

, 공백을 제거하고 교체합니다.

1

"s"(DOTALL) 패턴 수정 기호를 사용하면 여러 줄을 캡처 할 수 있습니다.

<div class='special'>Line One 
    Line Two 
    Line Three 
</div> 
+0

많은 경우 정규식이 실패합니다. (. +)는 두 개의 공백 뒤에 "개행 뒤에 두 개의 공백이 오는"것으로 끝나는 한 그 뒤에 아무 것도 매치하지 않을 것입니다. – tiftik

+0

내가 엉덩이에서 총을 쏘고있는 동안, 나는 이것이 Qiao가 요구하는 것과 정확히 같다고 생각한다. 요구 사항을 어떻게 읽으십니까? – timdev

+0

"줄의 시작 부분과 공백이있는 모든 텍스트의 배경 변경". 글쎄,이 경우 두 개의 공백으로 시작하지 않는 행을 변경합니다 : "asdf \ n1234 \ n5678". – tiftik