我有一个与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 :(得分:1)
preg_match_all('/\[{(\w+):((?:(?!}]).)*)}]/', $this->content, $matches);
print(htmlspecialchars(var_export($matches, true)));
如果你在浏览器中尝试这个,请记住&lt;和&gt;被视为标签,除非你用&amp; lt;替换它们和&amp; 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\';......?>',
),
)