簡體   English   中英

preg_match_all模式html標記問題

[英]preg_match_all pattern html tag issue

有4個不同的img標簽

<img src="img1.jpg" alt="test" />
<img src="img2.jpg" height="21"/>
<img src="img3.jpg" border="1">
<img src="img4.jpg" >

我使用PHP代碼

preg_match_all('#<img (.*?)([/>| />|>| >])#si',$this->Data,$img);  

但是這個PHP代碼結果

Array
  (
[1] => Array
    (
        [0] => src="img1.jpg"
        [1] => src="img2.jpg"
        [2] => src="img3.jpg"
        [3] => src="img4.jpg"

    )  

我想得出結果:

    Array
  (
[1] => Array
    (
        [0] => src="img1.jpg" alt="test"
        [1] => src="img2.jpg" height="21"
        [2] => src="img3.jpg" border="1"
        [3] => src="img4.jpg"

    )  

你能幫我嗎?

嘗試這個:

preg_match_all('#<img (.*?)\s?/?>#is', $this->Data, $img);  

\\s? 可選地匹配由可選斜杠/?引起的空格

這實際上將從格式良好的img標簽中獲取任何內容。 (假設屬性值中沒有任何>)。

作為要記住的事情,正則表達式不是解析html的正確工具-但對於小-有限-匹配則非常有用。

看起來就像在給你想要的東西。

$s = '<img src="img1.jpg" alt="test" />
      <img src="img2.jpg" height="21"/>
      <img src="img3.jpg" border="1">
      <img src="img4.jpg" >';
preg_match_all('~<img\s+(.+?)([\s/>]|)>~i', $s, $m);
print_r($m);

出去

Array
(
    ...
    [1] => Array
        (
            [0] => src="img1.jpg" alt="test" 
            [1] => src="img2.jpg" height="21"
            [2] => src="img3.jpg" border="1"
            [3] => src="img4.jpg" 
        )

順便說一下,據我所知,您不需要對preg_match_all使用s標志,它的cos與*_all匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM