代码之家  ›  专栏  ›  技术社区  ›  Emmanuel

php preg_replace检查第二个捕获组是否包含数据

  •  1
  • Emmanuel  · 技术社区  · 16 年前

    这是我的密码

    $string = preg_replace("/rad\:([0-9]+)px\;\s+\/\*\sALT\[(.+)\*\/|rad\:([0-9]+)px\;/",("$2"?"$2":"$1"),$string);
    

    基本上,在regex中,我有一个管道,我在搜索两个模式。 如果与第一个模式匹配(在管道左侧),那么我希望用第二个捕获组($2)替换它,但是如果与第二个模式匹配(在管道右侧),那么我希望用第一个捕获组($1)替换它;

    我试过的代码不起作用。 这有可能吗?

    谢谢你的帮助。

    1 回复  |  直到 12 年前
        1
  •  3
  •   Wrikken    12 年前

    >PHP 5.3:

     preg_replace_callback('..pattern...',
        function($match){return empty($match[2]) ? $match[1]:$match[2];},
        $string);
    

    <PHP 5.3:

     function _my_func($match) {
        return empty($match[2]) ? $match[1]:$match[2];
     }
     preg_replace_callback('..pattern...',
        '_my_func',
        $string);
    

    或者,在旧的PHP版本中, /e 修饰符有 since 5.5 been deprecated )

    preg_replace('...pattern..../e','strlen("$2") > 0?"$2":"$1"',$string);
    
    推荐文章