2011-09-19 135 views
0

我想從一個簡單的HTML代碼使用preg_match函數獲取所有圖像路徑,但我沒弄清楚。這裏是我的代碼:PHP preg_match函數的問題

$meta='<img src=\"imgdir/4fd60181316c0cb257628528adb1c342.gif\"><br><img src=\"imgdir/e2326f439cc5f8c201b411bd66eaf9a0.gif\"><br>'; 
$pattern = "/^imgdir\/[a-zA-Z0-9].*(png|jpg|gif)/i"; 
preg_match($pattern, $meta, $result); 

print_r($result); 

請幫我得到所有圖像的路徑。例如:imgdir/4fd60181316c0cb257628528adb1c342.gif

回答

3

正則表達式有幾個問題:

  1. 你不應該在字符串的開頭錨點(除去^
  2. *量詞應組[]
  3. 的後放應正確轉義,使其文字句
  4. 這最後一個是不是一個錯誤匹配,但由於您使用的是不區分大小寫的修飾符/i沒有必要同時指定a-zA-Z

的正確的是:

$meta='<img src=\"imgdir/4fd60181316c0cb257628528adb1c342.gif\"><br><img src=\"imgdir/e2326f439cc5f8c201b411bd66eaf9a0.gif\"><br>'; 
$pattern = "/imgdir\\/[a-z0-9]*\\.(png|jpg|gif)/i"; 
preg_match($pattern, $meta, $result); 

print_r($result); 

See it in action

0
$pattern = "/^imgdir\/[a-zA-Z0-9].*(png|jpg|gif)/i"; 

,因爲你有這將匹配只有一個字母數字字符。和*轉置。嘗試交換它們。你也許不得不逃離這個點,我不確定這一點。

1

^表示字符串的開頭,這樣不會工作,試試這個:

$pattern = "/imgdir\/[a-zA-Z0-9]*\.(png|jpg|gif)/i"; 
+0

你會想逃避。 '\\。',以便它只匹配一個文字週期。由於您使用雙引號,因此您還需要避開反斜槓。 – jasonbar

+0

我在編輯,謝謝。 – derp