代码之家  ›  专栏  ›  技术社区  ›  gX.

在另一个preg\u replace的比赛中进行preg\u replace

  •  0
  • gX.  · 技术社区  · 14 年前

    我有一种感觉,我可能错过了一些非常基本的东西。不管怎样,情况是这样的:

    我用preg\u replace来转换 ===inputA===inputB=== <a href="inputB">inputA</a>
    这就是我用的

    $new = preg_replace('/===(.*?)===(.*?)===/', '<a href="$2">$1</a>', $old);
    

    它的工作正常,但我还需要进一步限制输入,所以它像这样

    preg_replace('/[^\w]/', '', every Link or inputB);
    

    $2 在那边我需要对它进行手术 $2 \w 正如你在第二段代码中看到的。所以最终结果应该是这样的:
    ===The link===link's page=== <a href="linkspage">The link</a>

    我不知道怎么做,我该怎么办?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Wrikken    14 年前

    尽管已经有一个公认的答案:这就是 /e 修饰语或 preg_replace_callback() 适用于:

    echo preg_replace(
        '/===(.*?)===(.*?)===/e',
        '"<a href=\"".preg_replace("/[^\w]/","","$2")."\">$1</a>"',
        '===inputA===in^^putB===');
    
    //Output: <a href="inputB">inputA</a>
    

    function _my_url_func($vars){
       return '<a href="'.strtoupper($vars[1]).'">'.$vars[2].'</a>';
    }
    
    echo preg_replace_callback(
        '/===(.*?)===(.*?)===/',
        '_my_url_func',
        '===inputA===inputB===');
    
    //Output: <a href="INPUTA">inputB</a>
    
        2
  •  1
  •   Fanis Hatzidakis    14 年前
        3
  •  1
  •   Colin Hebert    14 年前

    preg_match )并处理这些结果,然后将它们放回HTML表单中?