php条件正则表达式问题

时间:2011-09-25 19:38:31

标签: php regex conditional

我正在努力解决这个问题。我正在使用一个自定义插件系统,它提供了这样的东西:

<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);

希望这有一定道理 - 甚至可能。感谢。

2 个答案:

答案 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)

不应(?=^:)(?!:)