我有一个文件 test.php :
public function editAction() {
//...
}
public function editGroupAction() {
//...
}
这是我的代码:
$source = "test.php";
$fh = fopen($source,'r');
while ($line = fgets($fh)) {
preg_match_all('/function(.*?)Action()/', $line, $matches);
var_dump($matches);
}
我希望得到以Action
结尾的函数,但结果为空。我如何得到这样的结果:
edit
editGroup
答案 0 :(得分:2)
您的代码可以简化为:
$fileName = 'test.php';
$fileContent = file_get_contents($fileName);
preg_match_all('/function(.*?)Action()/', $fileContent, $matches);
$functions = $matches[1];
结果($functions
):
Array
(
[0] => edit
[1] => editGroup
)
<小时/> <小时/>
以下是您的代码,但有一些更改......
首先,检查是否找到了任何内容,如果是,请将其添加到数组中。这是工作代码:
$source = "test.php";
$fh = fopen($source,'r');
$m = array();
while ($line = fgets($fh)) {
if(preg_match_all('/function(.*?)Action()/', $line, $matches)){
$m[] = $matches[1][0];
}
}
结果($m
):
Array
(
[0] => edit
[1] => editGroup
)
由于preg_match_all 返回完整模式匹配的数量,您可以使用return来检查是否找到了任何内容。如果您获得了匹配,请将所需值添加到数组中,以便稍后获取。
你得到一些空的结果,因为并非所有的行都匹配;)
旁注:如上所述,您最终会得到类似string(5) " edit"
的内容(请注意空格)。我不知道preg,所以我无法为你修复它。我能做的是建议你改为$functions = array_map('trim', $matches[1]);
答案 1 :(得分:0)
不确定这是否是您想要的,但您应该在regexp中转义括号。
所以这里是您的代码,稍作修改:
<?php
$content = "public function editAction() public function editGroupAction()";
preg_match_all('/function(.*?)Action\(\)/', $content, $matches);
echo '<pre>';
var_dump($matches);
echo '</pre>';
?>
是的,结果不是空的:)