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'键?我不只有一个子模式?这是否因为模式中的'或'条件?