2012-08-07 6 views
1

두 중괄호 또는 Smarty 태그 사이에 내용을 가져 오려고합니다.정규 표현식 preg_match PHP

{{$variable|lower}} [일치해야]

{{$variable|escape:javascript}} [일치해야]

: 나는 if '등의,

다음

있는 샘플 문자열 태그를 무시하고, 오직 유식 기능 변수를 얻으려면

{{$variable|str_replace:"search":"replace"}} [일치해야]

{{if $test eq "test"}} [NOT이어야 매트 나는이

preg_match_all('/{{\$?(\w+?[\W\w]*?)}}/',$str,$matches) 

그것은 괄호 안에 모든 것을 얻을 할 경우 CHED]

{{section name=foo start=10 loop=20 step=2}} [이 하지

] 일치해야합니다.

preg_match_all('/{{\$?(\w+?\W*?\w*?)}}/',$str,$matches); 

"변수 | 이스케이프"만 표시됩니다.

올바른 정규 표현식을 사용하십시오.

감사

+2

그것을 무엇입니까 당신이 성취하려고 노력하고 있습니까? 이미 심하게 설계된 Smarty를 다시 엔지니어링하는 것보다 더 좋은 방법이있을 수 있습니다. –

+0

@Michael 내가 +10 그랬 으면 좋겠다 – DaveRandom

+0

@DaveRandom 나의 두 가지 가장 큰 프로그래밍 후회는 멋쟁이 주위에 구축되었다. –

답변

0

내가 틀릴 수도 있지만,이 단순히 것 :

preg_match_all('/\{\{(\$[^|]+)\|[^}]+\}\}/',$str,$matches); 

$matches[1]이 변수를 보유 할 트릭을 수행합니다. 파일이 캐리지 리턴 (창 '\ r \ n을) 포함 된 경우, '/\{\{(\$[^|]+)\|[^}]+\}\}/s'을 시도 s 수정과

같은 경기 포함 : {{$var}}

//{{$var|foo}} {{$varbar}} bar as test string 
preg_match_all('/\{\{(\$[^|}]+)(\|[^}]+|)\}\}/s',$str,$matches); 
//shorter still: 
preg_match_all('/\{\{(\$[^|}]+)\|?[^}]*\}\}/s',$str,$matches); 

반환 :

array (
    0 => 
    array (
    0 => '{{$var|foo}}', 
    1 => '{{$varbar}}', 
), 
    1 => 
    array (
    0 => '$var', 
    1 => '$varbar', 
), 
    2 => //not in the array when using the second pattern 
    array (
    0 => '|foo', 
    1 => '', 
), 
) 
+0

죄송 합니다만 언급하지 않으 셨지만 {{$ variable}} 만 지원할 수 있습니까? – user1105950

+0

감사합니다. RegEx 튜토리얼을 추천 해 주시겠습니까? – user1105950

+0

글쎄, 나는 JS 콘솔의 기초를 배웠다. [this site] (http://www.regular-expressions.info/)를 나의 주된 참고 자료로 사용했다. 그들은 PHP 정규식에 대한 정보도 가지고 있습니다. 필자는 또한 많은 시행 착오를 거쳐 그 모든 것을 파악했지만 [온라인 기능] (http://www.functions-online.com), [writecodeonline] (http://writecodeonline.com/php/))와 [codepad] (http://codepad.org/)는 좋은 샌드 박스입니다 ...기본적으로 그냥 계속, 연습은 최고의 가정 교사 IMHO입니다. 그냥 기초를 읽고, 연습, 어딘가에 마법의 혀가 있다고 생각하지 않습니다 ... 미안 해요. –

0

사용이 정규 표현식 \{\{.*?\|.*.+?\}\}

+0

미안하지만 일치하는 항목이 없습니다. – user1105950