0

我有一个与 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;

我用许多模式和许多测试尝试了很多次,但我注意到我得到 null 或没有,只有当我的[{php:<?php .....?>}] contains <? and only when I put < ?.

4

1 回答 1

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

如果您在浏览器中尝试此操作,请记住 < 和 > 被视为标签,除非您将它们替换为 < 和>。这就是我使用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\';......?>',
  ),
)
于 2012-06-27T04:26:42.683 回答