为“修改我的PHP正则表达式”;escapeshellcmd";

为“修改我的PHP正则表达式”;escapeshellcmd";,php,regex,shell,preg-match,Php,Regex,Shell,Preg Match,我正在尝试构建一个用于排序/删除文件的过滤器 然而,在测试中,我注意到有两个文件正在通过网络传输,尽管最后用“(日本)”国家标识符命名。我认为这是因为它们的奇怪字符(一个是美元符号,另一个是连续三个句点) 这两个文件是: Quiz$Millionaire - Waku Waku Party (Japan).zip ...Iru! (Japan).zip 我在运行脚本时遇到以下错误。它正确地回显了文件,但是当尝试mv时,它会报告字符串中间缺少“$milligent” Quiz$Millionai

我正在尝试构建一个用于排序/删除文件的过滤器

然而,在测试中,我注意到有两个文件正在通过网络传输,尽管最后用“(日本)”国家标识符命名。我认为这是因为它们的奇怪字符(一个是美元符号,另一个是连续三个句点)

这两个文件是:

Quiz$Millionaire - Waku Waku Party (Japan).zip
...Iru! (Japan).zip
我在运行脚本时遇到以下错误。它正确地回显了文件,但是当尝试
mv
时,它会报告字符串中间缺少“$milligent”

Quiz$Millionaire (Japan) (v1.0).zip is a foreign language release. Moved to Removed folder.
mv: cannot stat 'Quiz (Japan) (v1.0).zip': No such file or directory
不幸的是,对于另一个文件(…Iru!(Japan).zip),我甚至没有找到匹配的/echo

有人告诉我需要使用
$thisGame=escapeshellcmd($thisGame)在下面的代码中,但当我这样做时,它会打乱我的正则表达式与其他一切的匹配-因此我认为我必须修改我的正则表达式-但我是一个初学者,不知道如何修复它!非常感谢您的帮助-代码如下:

$gameList = trim(shell_exec("ls -1"));
$gameArray = explode("\n", $gameList);

shell_exec('mkdir -p Removed');

// Do this magic for every file
foreach ($gameArray as $thisGame)
{
    if (!$thisGame) continue;
    // Probably already been removed
    if (!file_exists($thisGame)) continue;

    // Non-Engish speaking countries e.g. (France) or (Japan)
    if (preg_match('%\((Asia|Austria|Brazil|China|Denmark|Finland|France|Germany|Greece|Hungary|Israel|Italy|Japan|Japan, Asia|Korea|Netherlands|Norway|Poland|Portugal|Russia|Scandinavia|Spain|Sweden)\)%', $thisGame))
    {
        echo "{$thisGame} is a foreign language release. Moved to Removed folder.\n";
        shell_exec("mv \"{$thisGame}\" Removed/");
        continue;
    }

}

非常感谢你的帮助

您可能需要删除
escapeshellcmd
,并在
shell_exec
{$thisGame}
周围使用单引号,以防止任何shell扩展。谢谢。你知道我如何修正我的正则表达式吗?你不需要其他的改变。嗨,雷沃,你能给我举个例子说明你的意思吗?非常感谢!嘿,
shell_exec(“mv'{$thisGame}'删除/”