2014-05-12 1 views
1

하나 ...정규식 줄 내가 다시는 내 정신을 질문하려고 해요 요즘

내 정규식 옵션 줄 바꿈에 대한 일치하는 것을 거부 이유를 이해하지 못하는 휴식과 일치하지 않습니다. 코드 : (? 그것은 내가 0-1 경기를 제거 않을 경우 정규 표현식의 끝) :

$string = 'this is some template {$code}. nice! 
{$varinnewline} 
{if $bla}1{else}2{/if} 
'; 

echo "<pre>"; 
preg_replace_callback("/\{([^\}]*)\}(\r\n)?/Us", function($matches) { 
    print_r($matches); 
}, $string); 

그것은 (다른 사람의 사이에서)이 출력 생산

Array 
(
    [0] => {$varinnewline} 
    [1] => $varinnewline 
) 

아니라이 :

Array 
(
    [0] => {$varinnewline} 

    [1] => $varinnewline 
    [2] => 
) 

기본적으로 줄의 끝에 \ r \ n과 일치하는 정규식을 사용하고 싶습니다. (그 이유는 {}을 <? php?>에 변환 한 후?> 새 줄?>은 PHP 인터프리터에 의해 제거 된 것 같습니다.)

+1

은 정규식은 안 뭔가를하고 있습니까? 귀하의 정규식 *하지 *해야 할 일이 뭔가? 당신이 무엇을 요구하는지 모르겠습니다 ... –

+1

'm'수정자를 추가 해보십시오. – Halcyon

+0

@Halcyon :'m' 수식어는 패턴에'^'또는'$'가 포함되어있는 경우에만 유용합니다. –

답변

3

게시물을 참조하십시오.

How to match \r and \n without using [\r\n]?

  • 그러나 \r\n PCRE에서 떨어져, 당신의 질문에 대답하는 것도 줄 바꿈 일치하는 다른 문자 그룹이, 당신이 \R이 경우에 대한 멋진 이스케이프 시퀀스를 사용할 수 있습니다.

    \R은 일반 개행과 일치합니다. 즉, 유니 코드의 줄 바꿈 시퀀스로 간주되는 모든 것입니다. 여기에는 \v (수직 공백) 및 복수 문자 시퀀스 \x0D\x0A에 일치하는 모든 문자가 포함됩니다.

    preg_replace_callback("~\{([^\}]*)\}(\R)?~", function($matches) { 
        print_r($matches); 
    }, $string); 
    

    출력

    Array 
    (
        [0] => {$code} 
        [1] => $code 
    ) 
    Array 
    (
        [0] => {$varinnewline} 
    
        [1] => $varinnewline 
        [2] => 
    
    ) 
    Array 
    (
        [0] => {if $bla} 
        [1] => if $bla 
    ) 
    Array 
    (
        [0] => {else} 
        [1] => else 
    ) 
    Array 
    (
        [0] => {/if} 
    
        [1] => /if 
        [2] => 
    
    ) 
    
+0

아, 재미 있습니다. 문제를 찾았지 만, 당신이 주장하는 것에 의해서가 아니라 ;-) 당신의 정규 표현식은 \ r \ n과 utf-8 이외에도 사용할 수 있습니다. ungreedy 수식어가 범인 인 것처럼 보입니다. 나는 이상하게도 그것을 로컬로 반전 시키려고했는데 (? U) 작동하지 않았다. 무리 감사! – Tyron

+0

흥미 롭다.'\ R'의 적절한 사용을 위해 필요한 u 수정 자인가? –

+1

@ Jonny5 게시물보기 답변 [여기] (http://stackoverflow.com/questions/18988536/php-regex-how-to-match-r-and-n-without-using-r-n/18992691#18992691) – hwnd