PHP preg_match_all在进入函数时不起作用

PHP preg_match_all在进入函数时不起作用,php,function,preg-match-all,Php,Function,Preg Match All,有一组代码我已经使用了一段时间来查找文件中的字符串。但是当我把它放入一个函数中时,我没有得到结果,我认为它是preg\u match\u all不起作用的。我不知道怎么把这个修好 以下是我的代码(复制/粘贴自教程): 不确定您想用$outputvar和$$outputvar做什么,但不要使用它们返回某物。另外,$contents需要传入: function getprice($keyword, $contents) { $pattern = preg_quote($keyword, '/

有一组代码我已经使用了一段时间来查找文件中的字符串。但是当我把它放入一个函数中时,我没有得到结果,我认为它是
preg\u match\u all
不起作用的。我不知道怎么把这个修好

以下是我的代码(复制/粘贴自教程):


不确定您想用
$outputvar
$$outputvar
做什么,但不要使用它们<代码>返回某物。另外,
$contents
需要传入:

function getprice($keyword, $contents) {
    $pattern = preg_quote($keyword, '/');
    $pattern = "/^.*$pattern.*\$/m";

    if(preg_match_all($pattern, $contents, $matches)){
        $str = implode("\n", $matches[0]);
        $str = substr( $str, ( $pos = strpos( $str, ':' ) ) === false ? 0 : $pos + 1 );
        return $str;
    }
    else {
        return "99999";
    }
}
然后使用:

$outputvar = getprice($some_keyword, $some_contents);

这只涉及函数的使用,而不是您的正则表达式或解析的数据,因为您没有发布任何测试用例。

您如何使用函数?您不返回任何内容,
$$outputvar
仅在函数中可用。教程的URL是什么?@Barmar我两年前找到了教程,我不知道在哪里。从那以后我一直在用它。但是现在我想把它作为一个函数运行。我以为你从教程中得到了
$$outputvar
部分,这就是我想看到的。你在哪里设置
$contents
?感谢你快速回答,我没有发布测试,因为代码在不在函数中时工作得很好。$$outputvar是因为函数的第二个参数是要将结果放入其中的变量的名称。我试过你的选择,现在我总是得到“99999”。这意味着条件preg_match_all为false,即使它不应该为false。我想尽量说清楚can@user3464563您从未设置过
$contents
。它应该是函数的另一个参数。因此,您将regexp与一个空字符串进行匹配,因此它当然会失败。@Barmar好极了!!!成功了
$content
是在函数外部声明的,我没想到它在函数中会为null。非常感谢你的帮助!为什么你不认为它是空的?这是一个普通的PHP变量范围问题。您必须将其作为参数传递,或者在函数中使用
global
声明。@Barmar很好,因为我是初学者,对PHP了解不多。我的脚本使用stackoverflow上的教程和示例。
$outputvar = getprice($some_keyword, $some_contents);