[英]How to use regex to match all php function parameter names?
我对正则表达式没有太多经验。 我面临以下问题:我想在方法的PHP声明代码中找到所有参数名称。
例如:
public function foo($param1, $param2, $param3) {}
将正则表达式应用于此代码时,它应该给我匹配项param1,param2和param3。 在尝试解决此问题时,我来到了以下正则表达式:
/\\((?:[\\,\\s\\w]*\\$(\\w+)[\\,\\s\\w]*)+\\)/g
我的想法是:
\\(
和\\)
。 \\$(\\w+)
。 [\\,\\s\\w]*
[\\,\\s\\w]*\\$(\\w+)[\\,\\s\\w]*
(?:[\\,\\s\\w]*\\$(\\w+)[\\,\\s\\w]*)+
不幸的是,我无法匹配并获取定界符(方括号)内的所有参数名称。 正则表达式所做的所有事情都与整个方法的参数声明匹配,并且在名称组上,它仅与最后一个匹配,这就是param3名称。
谁能比我拥有更多的经验,可以帮助我解决这个小难题? 我一直在使用http://regexr.com/ 。 从现在开始,感谢您的帮助。
不是正则表达式,但它可以工作。
$str='public function foo($param1, $param2, $param3) {}';
$str2 = explode(")",explode("(",$str)[1])[0];
$str2 = explode(",",str_replace("$","",$str2));
var_dump($str2);
http://sandbox.onlinephpfunctions.com/code/b2c2f58ca859e714a169455573ea3fabc8694e84
\\$([az[0-9][^,\\)]]+)
应该可以
说明:搜索$,获取除或以外的所有字母数字值并将结果分组
经过www.regexe.de测试
结果:
$param1
$param2
$param3
假设我们使用“类型提示”对功能文本进行了更复杂的描述。
使用preg_match_all
函数的解决方案:
$func_str = 'public function foo(Closure $param1, $param2 = [], $param3="") {}';
preg_match_all("/\s[$](\w+?)\b/i", $func_str, $matches);
print_r($matches[1]);
输出:
Array
(
[0] => param1
[1] => param2
[2] => param3
)
我知道您正在寻求一个正则表达式解决方案,但是已经发布了3个正则表达式答案,并且使用Reflection
来实现此目的更有意义,因为它已经内置在php中。 因此,出于这些原因,这是Reflection
答案
class Bar {
public function foo($param1, $param2, $param3) {}
}
$class = new ReflectionClass('Bar');
var_dump($class->getMethod('foo')->getParameters());
array(3) {
[0] =>
class ReflectionParameter#3 (1) {
public $name =>
string(6) "param1"
}
[1] =>
class ReflectionParameter#4 (1) {
public $name =>
string(6) "param2"
}
[2] =>
class ReflectionParameter#5 (1) {
public $name =>
string(6) "param3"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.