php
  • regex
  • preg-replace
  • 2015-03-02 4 views 0 likes 
    0

    Я пытаюсь разработать базовый механизм шаблонов, поэтому я должен использовать preg_replace так много. У меня есть проблема о ниже теме:Php preg_replace, шаблон регулярного выражения не соответствует

    $subject = "{%content%} %content%"; 
    $pattern = '/matched_regex/'; 
    $replace = 'OK'; 
    echo preg_replace($pattern,$replace,$subject); 
    

    и выход должен быть таким:

    {%content%} OK 
    

    другими словами, это будет только согласован с %content%

    Что я должен сделать регулярное выражение шаблон?

    +0

    Я попробовал этот $ шаблон = «/ [^ {]% \ s * (. *) \ с *% [^}]/'; –

    +0

    и этот $ pattern = '/{{0}?%\s*(.*?)\s*%}{0}/'; –

    ответ

    1

    Это будет соответствовать только %content%, который не следует за { или находится в начале строки темы. Любой символ, который был до %content% помещается обратно с \1 в строке замены:

    $subjects = [ 
        '{%content%} %content%', 
        'Foo {%content%} bar %content% baz', 
        'Foo{%content%}bar%content%baz', 
        'Foo{%content%}bar%content%', 
        '{%content%}%content%', 
        '%content%{%content%}', 
    ]; 
    
    $replace = 'OK'; 
    foreach ($subjects as $subject) { 
        $pattern = '/(^|[^{])%content%/'; 
        echo preg_replace($pattern, '\1'.$replace, $subject), PHP_EOL; 
    } 
    

    Выход:

    {%content%} OK 
    Foo {%content%} bar OK baz 
    Foo{%content%}barOKbaz 
    Foo{%content%}barOK 
    {%content%}OK 
    OK{%content%} 
    
    +0

    Это замечательно. Большое спасибо! :) –

     Смежные вопросы

    • Нет связанных вопросов^_^