首页 > 解决方案 > 使用 (preg_replace) 我认为我的语法有点不对劲。我是否需要退出某事或其他

问题描述

我正在尝试使用 (preg_replace) 从 $outputpid 中删除目录值并将其存储在 $nofolder 中。出于某种原因,$nofolder 返回 NULL。我忘记退出某些东西还是其他东西?

$pidnum = '710';  
foreach (glob("/var/www/secure/catalog/current/programs/transfer/*.pdf") as $filename) {
    if (strpos($filename, $pidnum) !== false) {
        $outputpid = $filename;
    } 
} 
echo "$outputpid" . "<br />";
$nofolder = preg_replace('/var/www/secure/catalog/current/programs/transfer/', '', $outputpid);
echo "$nofolder" . "<br />";

标签: php

解决方案


在这种情况下,您应该使用str_replace而不是preg_replace,因为您在这里不需要任何正则表达式。

您的正则表达式失败的原因是因为您“选择”斜杠作为正则表达式的开始/结束分隔符,但由于您的字符串中有多个斜杠,它将在 var 之后结束正则表达式。这使您的正则表达式无效。

要么str_replace改用(最好的解决方案 imo),要么在你的模式周围添加其他分隔符。

所以你的代码会变成:

$pidnum = '710';  
foreach (glob("/var/www/secure/catalog/current/programs/transfer/*.pdf") as $filename) {
    if (strpos($filename, $pidnum) !== false) {
        $outputpid = $filename;
    } 
} 
echo "$outputpid" . "<br />";
$nofolder = str_replace('/var/www/secure/catalog/current/programs/transfer/', '', $outputpid);
echo "$nofolder" . "<br />";

与您的问题无关,但您无需将变量放在引号中即可对它们进行处理(在这种情况下将它们呼出)。你应该和

echo $outputpid . "<br />";

代替

echo "$outputpid" . "<br />";

推荐阅读