[英];Or statement in Regular expression not working
我有兩個像這樣的html標簽:
$data ='<div style="background:url(img/img.jpg);color:blue"><div style="background-image:url(img/img2.jpg);color:black"></div></div>';
我使用正則表達式來獲取圖像路徑,例如:
if( preg_match_all("/background-image:url\((.*?)\);/", $data, $backgroundImg) || preg_match_all("/background:url\((.*?)\);/", $data, $backgroundImg) )
但是每當我打印$ backgroundImg時,它只顯示第一個
Array
(
[0] => Array
(
[0] => background-image:url(images/background.jpg);
)
[1] => Array
(
[0] => images/background.jpg
)
)
如何也獲得第二個網址。
嘗試這個:
$data = '<div style="background:url(img/img.jpg)"><div style="background-image:url(img/img2.jpg)"></div></div>';
preg_match_all("/background(?:-image)?:url\(([^)]+)\)/", $data, $backgroundImg);
var_export($backgroundImg);
輸出:
array (
0 =>
array (
0 => 'background:url(img/img.jpg)',
1 => 'background-image:url(img/img2.jpg)',
),
1 =>
array (
0 => 'img/img.jpg',
1 => 'img/img2.jpg',
),
)
(?:
在正則表達式中表示不進行任何捕獲的子模式
<?php
$data ='<div style="background:url(img/img.jpg)"><div style="background-image:url(img/img2.jpg)"></div></div>';
if(preg_match_all('~\bbackground(-image)?\s*:(.*?)\(\s*(\'|")?(?<image>.*?)\3?\s*\)~i',$data,$matches)){
$images = $matches['image'];
print_r($images);
}
?>
結果:
Array
(
[0] => img/img.jpg
[1] => img/img2.jpg
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.