使用 preg_replace_callback 查找并替换具有可变数量参数的函数签名
Posted
技术标签:
【中文标题】使用 preg_replace_callback 查找并替换具有可变数量参数的函数签名【英文标题】:Using preg_replace_callback to find and replace a function signature with a variable number of parameters 【发布时间】: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 抱怨正则表达式不正确。
感谢您的帮助,
谢谢。
【问题讨论】:
【参考方案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()
输入值。
【讨论】:
以上是关于使用 preg_replace_callback 查找并替换具有可变数量参数的函数签名的主要内容,如果未能解决你的问题,请参考以下文章
使用 preg_replace_callback 查找并替换具有可变数量参数的函数签名
将preg_replace()改写为preg_replace_callback()
从 preg_replace 到 preg_replace_callback