使用 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()
输入值
使用 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()
输入值