从我的preg_match

时间:2018-06-23 09:24:59

标签: php regex preg-replace preg-match

我有一个用于过滤某些ROM和ISO文件的脚本。

我(在很多帮助下)得到了一个工作脚本,该文件按文件名过滤文件,但是我尝试添加一个部分,在其中可以包含额外的临时文件名,方法是在其中提供文件名本地.txt文件。这项工作正常,但是在我的.txt文件中,我必须将完整文件名(包括扩展名.txt)放入.txt中,例如,我的“ manualregiondupes.txt文件如下所示:

Game One.zip
Game Two.zip
Game Three.zip

我希望它只是像这样在.txt文件中键入它们:

Game One
Game Two
Game Three

我正在使用的当前正则表达式试图匹配找到的完整文件名(包括.zip扩展名),而我希望它仅与文件扩展名前的部分匹配。但是,我必须小心-因为我不想要这样的游戏:

如果“沙滩排球(美国)” 在.txt中,则匹配

“夏季热沙滩排球(美国)”

另一边的单词也一样-

如果“敏感足球(美国)” 位于.txt中,则匹配

“敏感足球(美国)(BETA)”

这是我的剧本;

// Make sure what manualregiondupes.txt is doing
if (file_exists('manualregiondupes.txt'))
{
    $manualRegionDupes = file('manualregiondupes.txt', FILE_IGNORE_NEW_LINES);
    $manualRegionPattern = "/^(?:" . implode("|", array_map(function ($i)
    {
        return preg_quote(trim($i) , "/");
    }
    , $manualRegionDupes)) . ')$/';
    echo "ManualRegionDupes.txt has been found, ";
    if (trim(file_get_contents('manualregiondupes.txt')) == false)
    {
        echo "but is empty! Continuing without manual region dupes filter.\n";
    }
    else
    {
        echo "and is NOT empty! Applying the manual region dupes filter.\n";
    }
} 
else
{
    echo "ManualRegionDupes.txt has NOT been found. Continuing without the manual region dupes filter.\n"; 
}


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


    // Filenames in manualregiondupes.txt
    if (file_exists('manualregiondupes.txt'))
    {
        if (trim(file_get_contents('manualregiondupes.txt')) == true)
        {
            if (preg_match($manualRegionPattern, $thisGame))
            {
                echo "{$thisGame} is on the manual region dupes remove list. Moved to Removed folder.\n";
                shell_exec("mv \"{$thisGame}\" Removed/");
                continue;
            }
        }
    }

    ... SCRIPT CONTINUES HERE BUT ISN'T RELEVANT!

最简单的方法是什么?我想我只是问了一个很长的问题,当它实际上很简单时,但是,哦,好吧-我对PHP(或说真的任何脚本)不太满意,所以在此道歉并先谢谢您! :D

1 个答案:

答案 0 :(得分:1)

您可以在正则表达式中使用pathinfo-

$withoutExt = preg_replace('/\.' . preg_quote(pathinfo($path, PATHINFO_EXTENSION), '/') . '$/', '', $path);

它为您提供完美的文件名输出,而无需扩展名

  1. file.txt->文件
  2. file.sometext.txt-> file.sometext