【问题标题】:preg replace only numbers between parenthesispreg 仅替换括号之间的数字
【发布时间】:2017-02-20 22:15:21
【问题描述】:

我需要替换括号之间的数字。例如

(1) should be (<a href="1">1</a>) --> I could do this
(1,2,5,8) should be (<a href="1">1</a>,<a href="2">2</a>,<a href="5">5</a>,<a href="8">8</a>)
(2-5, 13) should be (<a href="2">2</a>-<a href="5">5</a>,<a href="13">13</a>)

我无法进行最后两次转换。

【问题讨论】:

    标签: preg-replace


    【解决方案1】:
    <?php
    //Config
    $pattern='/\((\d|\s|,|\d+-\d+)+\)/';
    $replacement='<a href="$0">$0</a>';
    $subject='foo 1 bar (baz) (1) whatever (2,3,4) something (7-9,11) more';
    
    
    //Callback
    $callbackbody="return preg_replace('/\d+/','$replacement',\$matches[0]);";
    $callback=create_function('$matches',$callbackbody);
    
    
    //main
    echo preg_replace_callback($pattern, $callback, $subject);
    ?>
    

    【讨论】:

    • 非常感谢。但这段代码也删除了“(”和“)”。我想保留括号。
    • 改变了我的答案,因为我错过了:它使代码更容易,只是从匿名函数中删除了行,主动删除了括号
    • 再次更新,去掉丑陋的global,整理回调。
    • 比很多,还可以,很实用。
    最近更新 更多