2013-07-02 118 views
-2

我正在製作一個php文件來搜索引入名稱的目錄中的圖像,但函數preg_match返回此錯誤:「Warning:preg_match():Delimiter不能是字母數字或反斜槓「。代碼是這樣的:PHP:preg_match():分隔符不能是字母數字或反斜槓

<?php 
$ruta='fotos'; 
// Usamos dir 
$dir=dir($ruta);  
// Archivo a Buscar 

$busqueda=$_POST['busqueda'] ; 
$buscar = $busqueda; 

// Recorremos los Archivos del Directorio 
while ($elemento = $dir->read()) 
{  
    // Evitamos el . y ... 
    if (($elemento != '.') and ($elemento != '..')) 
    { 
     // Vemos si Existe el Archivo 
     if (preg_match($buscar, $elemento) AND is_file($ruta.$elemento) ) 
     { 
      echo " Archivo : $elemento <br>"; 
     } 


    }  
}  
?> 

它給了我在循環中的每個迭代的警告。我ve trying to fix it but I can噸。有人可以幫我嗎?

+2

更改'$ buscar =「arica」;'到'$ buscar =「#arica#」;' – HamZa

+0

顯示您如何嘗試修復它,這爲我們節省了所有嘗試同樣的東西:) – naththedeveloper

+1

[YU NO USE THE搜索欄](http://stackoverflow.com/search?q= [preg-match] +分隔符+必須+不是+字母數字+或+反斜槓) – HamZa

回答

0

您對此問題沒有做足夠的研究。

$buscar = "arica"; 

是你的模式,我猜。我在這裏看不到任何正則表達式,但它需要分隔符。

From php manual:

When using the PCRE functions, it is required that the pattern is enclosed by delimiters. A delimiter can be any non-alphanumeric, non-backslash, non-whitespace character.

Often used delimiters are forward slashes (/), hash signs (#) and tildes (~). The following are all examples of valid delimited patterns.

所以,你需要在你的情況下使用的分隔符的一個例子

$buscar = "/arica/"; 

但是刪除的preg_match(),並使用簡單

$buscar == $elemento 

它會做一樣。你應該考慮使用DirectoryIterator。有了它,你可以改變你的代碼

$ruta='fotos'; 
$busqueda=$_POST['busqueda'] 
$iterator = new DirectoryIterator($ruta); 
foreach ($iterator as $fileinfo) { 
    if ($fileinfo->isFile() && $fileinfo->getFileName() == $busqueda) { 
     echo " Archivo : $elemento <br>"; // here can be added 'break' I guess there is only 1 file with name you search for. 
    } 
} 

我不知道你要實現什麼,但也許你應該只使用file_exists();

0

的錯誤是原因由preg_match($buscar, $elemento)。該呼叫成功或失敗,取決於$buscar的價值。但是,$buscar來自用戶,因爲

$busqueda=$_POST['busqueda'] ; 
$buscar = $busqueda; 

首先,沒有多少用戶能夠制定正則表達式,所以要求正則表達式的用戶很可能不是一個好主意。我不知道你是否打算這樣做,因爲變量$buscar之前定義爲$buscar = "arica"(將不同目的重複使用相同的變量不是一個好主意,它會使開發人員感到困惑。)

其次,字符串作爲模式必須包含分隔符。我不知道$buscar = "arica"中的a是否是一個有效的分隔符,它肯定是一個不尋常的分隔符(通常,/被選爲分隔符,但其他符合分隔符)。所以它應該是

$buscar = "/arica/"; 

但請注意,/arica/不會被用作正則表達式安韋,因爲我剛纔所說的。

相關問題