我正在努力解决这个问题。我正在使用一个自定义插件系统,它提供了这样的东西:
<plugin:class:method var1='hello', var2='yes' />
但是,':method'和变量不一定存在 - 只需要'class'。对于instace,这应该还可以:
<plugin:class />
我遇到的问题是当方法和/或变量不存在时,如何让正则表达式有条件地返回东西。到目前为止,我可以在所有部分存在时得到结果,但不是其他 - 这就是我所处的位置(在第一个条件下挣扎):
$f = "/<plugin:(?P<class>\w+)(?(?=^:)?P<method>\w+)\s+(.*)\/>/sUi";
使用以下代码的情况非常好,只需要能够使用条件返回所有部分:
preg_replace_callback($f, array($this, 'processing'), $text);
希望这有一定道理 - 甚至可能。感谢。
答案 0 :(得分:1)
最简单,最易于维护的方法是使用简单的plugin:class:method
表达式获取整个/plugin:\S+/
字符串,然后explode(':', $string)
。
因此,除了上面的代码,你还有类似的东西:
$f = "/<plugin:(\S+)\s+(.*?)\/>/sUi";
if (preg_match($f, $string, $matches)) {
$parts = explode($matches[1]);
if (!in_array('method', $parts))
{
// do whatever needs done if "method" is not present
}
// ...
}
答案 1 :(得分:0)
不应(?=^:)
为(?!:)
?