为“修改我的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}'删除/”代码>