【问题标题】:Using preg_replace_callback to find and replace a function signature with a variable number of parameters使用 preg_replace_callback 查找并替换具有可变数量参数的函数签名
【发布时间】:2021-01-27 19:29:49
【问题描述】:

使用 PHP preg_replace_callback 函数,我想用子字符串 "X1X2" 替换模式 "function([x1,x2])",用子字符串 "function([x1,x2,x3])" "X1X2X3",一般来说:"function([x1,x2,...,x2])" 带有子字符串 "X1X2...Xn" -- 在给定的字符串中。

感谢this previous question 中的Wiktor,我让它适用于接受两个参数的函数:

// $string is the string to be searched
$string = preg_replace_callback('/function\(\[([^][\s,]+),([^][\s,]+)\]\)/', function ($word) {
        $result = strtoupper($word[2]) . strtoupper($word[2]);              
        return $result;
        }, $string);

我想更进一步,让它适用于具有任意数量参数的函数。我尝试使用正则表达式'/function\(\[[([^][\s,]+)]+[,]*\]\)/' 来表示我想要一个重复的非白色子字符串,后跟一个可选的逗号——来解释最后一个没有逗号的函数参数。然而,这让 PHP 抱怨正则表达式不正确。

感谢您的帮助,

谢谢。

【问题讨论】:

    标签: php regex preg-replace-callback


    【解决方案1】:

    您可以使用简单的binary_function\(\[(.*?)]\) 正则表达式匹配和捕获function([]) 之间的所有内容,然后用逗号分割内容,并重新加入大写字符串:

    $text = 'binary_function([x,y]) and binary_function([x1,y1,z1])';
    echo preg_replace_callback('~binary_function\(\[(.*?)]\)~', function ($m) {
        return implode("", array_map(function ($x) { return strtoupper($x); }, explode(",", $m[1])));
    }, $text);
    // => XY and X1Y1Z1
    

    请参阅PHP demo

    如果([]) 内可以有空格,您可以trim() 输入值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多