Php 预匹配所有可能的变化

Php 预匹配所有可能的变化,php,preg-match-all,Php,Preg Match All,我想知道一根弦的三个部分。字符串可以是 {identifier}、{identifier:foo}、{identifier:foo | bar}或{identifier | bar} 字符串可以在$content中出现多次这就是为什么使用preg\u match\u all 目前我有 preg_match_all( '#\{'.preg_quote($identifier).':?([^\}|]+)?\|?([^\}]+)?\}#i', $content, $matches ); 它适用于除{

我想知道一根弦的三个部分。字符串可以是

{identifier}、{identifier:foo}、{identifier:foo | bar}或{identifier | bar}

字符串可以在$content中出现多次这就是为什么使用preg\u match\u all

目前我有

preg_match_all( '#\{'.preg_quote($identifier).':?([^\}|]+)?\|?([^\}]+)?\}#i', $content, $matches );
它适用于除{identifier | bar}之外的所有版本,但不适用于其他版本

编辑:

$matches应该是这样的,在$content中只有一个外观


它很容易使所有这些与一个单一的表达。但是你想让$matches的结构看起来怎么样?我不明白,对我来说是有效的:是的,只有{identifier | bar}在我的情况下不起作用。你确定要使用identifier | bar而不是identifier:bar吗?对不起,伙计们-正如@Leandro提到的,这很好,问题出在应用程序的其他地方
Array
(
    [0] => Array
        (
            [0] => {timezone:foo|bar}
        )

    [1] => Array
        (
            [0] => foo
        )

    [2] => Array
        (
            [0] => bar
        )

)