0
我正在做一些正則表達式在PHP和匹配使用preg_match();preg_match捕獲意外的子模式
我有可能會是這樣的文字:
$imy = "...without sophisticated apparatus<div class="caption"><div class="caption-inner">
<img src="http://dev.mysite.org/Heatmap.png" alt="" title="" class="image-thumbnail" />
Caption text</div></div>Some more text...
<img src="http://dev.mysite.org/Heatmap.png" alt="" title="" class="image-thumbnail" />blablah..."
,我的目標是要挑選出無論是「IMG」標籤封裝在「格」標籤(包括「分區」標籤)或者只是「img」,如果它不包含在div中。我也在每種情況下都希望捕獲包含在「img」標籤的src屬性中的地址。
這是我使用的模式:
$imagepattern = '/<div class="caption-inner[^>]+>.*<img\b[^>]*\bsrc="([^">]*)"[^>]*>.*<\/div>(<\/div>)?|<img\b[^>]*\bsrc="([^">]*)"[^>]*>/Us';
和它的偉大工程的「格」封閉的圖像,但對於divless圖像我得到捕獲的子模式奇怪的結果。
我反覆調用preg_match並從主題字符串中刪除匹配,然後再次將其發送到preg_match。我到的preg_match調用如下:
preg_match($imagepattern,$imy,$image,PREG_OFFSET_CAPTURE)
我讓我的圖像陣列中針對divless圖像標籤匹配時,看起來是這樣的:
$image = [0] => Array
(
[0] => <img src="http://dev.molmeth.org/Heatmap.png" alt="" title="" class="image-thumbnail" />
[1] => 1
)
[1] => Array
(
[0] =>
[1] => -1
)
[2] => Array
(
[0] =>
[1] => -1
)
[3] => Array
(
[0] => http://dev.mysite.org/Heatmap.png
[1] => 11
)
如何能在$圖像陣列有「2 '和'3'鍵?我不只有一個子模式?這是否因爲模式中的'或'條件?