使用 preg_replace_callback 查找和替换具有可变数量参数的函数签名

Using preg_replace_callback to find and replace a function signature with a variable number of parameters

使用 PHP preg_replace_callback 函数,我想用子字符串“X1X2”、“function([x1, x2,x3])”和子字符串“X1X2X3”,一般来说:“function([x1,x2,...,x2])”和子字符串“X1X2...Xn”——在给定的字符串中。

感谢 Wiktor in ,我让它适用于带有两个参数的函数:

// $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 抱怨正则表达式不正确。

感谢任何帮助,

谢谢。

您可以使用简单的 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() 输入值