我在 php 中做一些正则表达式并使用 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..."
我的目标是选择包含在“div”标签(包括“div”标签)中的“img”标签,或者如果它没有包含在 div 中,则只选择“img”。在每种情况下,我还想捕获“img”标签的 src 属性中包含的地址。
这是我使用的模式:
$imagepattern = '/<div class="caption-inner[^>]+>.*<img\b[^>]*\bsrc="([^">]*)"[^>]*>.*<\/div>(<\/div>)?|<img\b[^>]*\bsrc="([^">]*)"[^>]*>/Us';
它适用于“div”封闭图像,但对于没有 div 的图像,我得到捕获的子模式的奇怪结果。
我反复调用 preg_match 并从主题字符串中删除匹配项,然后再将其重新发送到 preg_match。我对 preg_match 的调用如下所示:
preg_match($imagepattern,$imy,$image,PREG_OFFSET_CAPTURE)
与无 div 图像标签匹配时,我在图像数组中得到的内容如下所示:
$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
)
$image 数组如何具有 '2' 和 '3' 键?我不是只有一个子模式吗?这是因为模式中的“或”条件吗?