2012-06-22 1 views
0

У меня есть вопрос, связанный с pcre с php.Как написать шаблон pcre для соответствия определенному тегу

Мне нужно написать небольшой парсер для определенного файла, и я не знаю регулярное выражение очень хорошо, поэтому мне нужна помощь.

Это вход ...

blah blah [{img:xyzname}] one more blah blah[{root}] 
and [{php:<?php ...echo 'phpcode';......?>}] 

... так что я должен заменить эти значения с моими них, так вот что я сделал ...

$alt=preg_replace_callback('|\[{(.*[^}\]])}\]|iU', 
             function ($match){ 
              $m=explode(':',$match[1]); 


               switch($m[0]){ 

                case 'img': 
                  return $m[1] 
                break; 
                case 'php': 
                  // i want that php code here in $m[1] but i am getting nothing 
                break; 
                default: 
                  return 'UNDEFINED'; 
                break; 
               } 
              } 
             },$this->content); 
      $this->content=$alt; 

Я пробовал много раз со многими паттерами и многими тестами, но я заметил, что я получаю нуль или ничего, только когда мой [{php:<?php .....?>}] contains <? and only when I put < ?.

+0

Я также нашел этот паттерн, но

+0

, но его рабочая скважина в regexbuddy это php, который пропускает php-теги в этом случае –

ответ

1
preg_match_all('/\[{(\w+):((?:(?!}]).)*)}]/', $this->content, $matches); 
print(htmlspecialchars(var_export($matches, true))); 

Если вы пытаетесь это в браузере помните, что < и> получить лечение как теги, если не заменить их & ЛТ; и & gt ;. Вот почему я использовал htmlspecialchars(). Используя ваш вход, я получаю следующее:

array (
    0 => 
    array (
    0 => '[{img:xyzname}]', 
    1 => '[{php:<?php ...echo \'phpcode\';......?>}]', 
), 
    1 => 
    array (
    0 => 'img', 
    1 => 'php', 
), 
    2 => 
    array (
    0 => 'xyzname', 
    1 => '<?php ...echo \'phpcode\';......?>', 
), 
) 

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

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