PHP正则表达式查找具有多个值的字符串

时间:2013-03-03 11:24:05

标签: php regex

我的问题隐藏了这个字符串:Mage::helper('catalog/image')->init($product, 'image', $image->getFile())->resize(265)

我正试图找到一种方法来找到这个字符串。但是...在字符串中是:$ product,image和265变量。 所以我需要找到如下字符串:
Mage::helper('catalog/image')->init($product, 'image', $image->getFile())->resize(265) Mage::helper('catalog/image')->init($product, 'thumb', $image->getFile())->resize(75) Mage::helper('catalog/image')->init($image, 'mini', $image->getFile())->resize(25) 等...

现在我有了这个,但它只是搜索Mage::helper('catalog

的文件
function listFolderFiles($dir){
    $ffs = scandir($dir);
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..'){
            if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
            if(strpos($ff, '.phtml')!==false){
                $contents = file_get_contents($dir.'/'.$ff);
                $pattern = preg_quote("Mage::helper('catalog", "/");
                $pattern = "/^.*$pattern.*\$/m";
                if(preg_match_all($pattern, $contents, $matches)){
                   echo "Found matches in: ".$dir.'/'.$ff."\n";
                }
                else{
                   echo "No matches found in: ".$dir.'/'.$ff."\n";
                }
            }
        }
    }
}

listFolderFiles('../app/design');

1 个答案:

答案 0 :(得分:1)

显然不需要"/^.*$pattern.*\$/m"preg_match_all$matches

$pattern = "/Mage::helper\('catalog\/image'\)->init\([^)]+?image->getFile\(\)\)->resize\(\d+\)/";
if ( preg_match($pattern, $contents) ) {
    // do stuff
}

这将匹配包含"Mage::helper('catalog/image')->init(Ximage->getFile())->resize(Y)"
的任何字符串 其中X是一个或多个不是)的字符,而Y是一个或多个数字。