php
  • html
  • preg-replace
  • replace
  • 2011-06-15 62 views 1 likes 
    1

    我對preg_replace問題有一個簡短的問題。我只是RegEx的新手。 我想什麼來實現如下:preg_replace在DIV標記中的自己屬性

    • 我有一個DIV標籤<div data-info="sourcefile.ext" class="elm swf">sourcefile</div>
    • 我想提取(數據信息)值和(類)值
    • 有可能是可選的標籤,但我並不需要這些屬性的TE值
    • 這種替換應該在一個字符串

    合作多次,我有:

    $input = '<div data-info="sourcefile.ext" class="elm swf">sourcefile</div>'; 
    $input = preg_replace('/(<div\s(class="(.*?)")\s(data-info="(.*?)")\b[^>]*>)(.*?)<\/div>/i', "$1 class:$2 data-info:$3", $input); 
    

    我想使用的值:<object src="(data-info)" type="(class)">

    這可能嗎?有人可以展示/解釋我是如何工作的嗎?

    非常感謝。

    +1

    而你絕對需要在服務器端做到這一點?它看起來有點像你在修補DOM,這可能是最容易用JavaScript完成的.. – doub1ejack 2011-06-15 14:28:34

    回答

    0

    您的正則表達式失敗,因爲它按錯誤的順序列出屬性。匹配模式不適合這樣的事情(這將是更喜歡使用DOM解析器用於此目的的實際原因)。

    \b轉義錯誤放置。而且你可以用這兩個屬性爲(?: .. | ..)+允許一點不含糊:

    $input = preg_replace('/(?:<div 
        (?: \s class="(.*?)" 
         | \s data-info="(.*?)" )+ 
        [^>]*>) 
        (.*?)<\/div>/ix', "$3 class:$1 data-info:$2", $input); 
    

    的$ 1 $ 2 $ 3的編號被關閉,也許你想在這裏使用named capture groups反正。

    +0

    太棒了!非常感謝!! – FinchSol 2011-06-15 14:53:36

    相關問題