1
我正在解析一些HTML,這是我在表單中生成的。這是一個令牌系統。我試圖從後面的正則表達式中獲取信息,但不知何故,這只是第一場比賽。我在網上找到了一個正則表達式,除了能夠處理多個事件外,幾乎完成了我所需要的。正則表達式找不到所有變量
我希望能夠用找到的字符串生成的內容替換找到的內容。
所以,這裏是我的代碼:
$result = preg_replace_callback("/<\/?\w+((\s+(\w|\w[\w-]*\w)(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)\/?>\[\*.*\*\]\<\/[a]\>/i", array(get_class($this), 'embed_video'), $str);
public function embed_video($matches)
{
print_r($matches);
return $matches[1] . 'foo';
}
我真的只需要的屬性,因爲它們containt所有的有價值的信息。標籤的內容僅用於查找令牌。這是什麼需要做的一個例子:
<a type="TypeOfToken1" id="IdOfToken1">[*SomeTokenTitle1*]</a>
<a type="TypeOfToken2" id="IdOfToken2">[*SomeTokenTitle2*]</a>
的preg_replace_callback()
在此之後應返回:
type="TypeOfToken1" id="IdOfToken1" type="TypeOfToken2" id="IdOfToken2"
但是,回調函數輸出匹配,但不與返回替換它們。因此,$result
在preg_replace_callback
之後保持不變。可能是什麼問題呢?
與實際數據的例子:
輸入:
<p><a id="someToken1" rel="someToken1">[*someToken1*]</a> sdfsdf <a id="someToken2" rel="someToken2">[*someToken2*]</a></p>
返回$result
:從print_r()
id="someToken1" rel="someToken1"foo
返回,如果回調函數:
Array ([0] => [*someToken1*] sdfsdf [*someToken2*] [1] => id="someToken1" rel="someToken1" [2] => rel="someToken1" [3] => rel [4] => ="someToken1")
我認爲它沒有返回它應該的兩個字符串。
[解析HTML的最佳方法]的可能的重複(http://stackoverflow.com/questions/3577641/best-methods-to-parse-html) – Gordon 2011-03-07 12:53:44
你的代碼片段工作正常(除了剝離開始的標籤)。這聽起來很可能是你在'$ str'中查找結果而不是'$ result'。 – mario 2011-03-07 12:57:08
我不認爲這個問題值得讚賞。但是,如何從HTML解析X已經被回答了很多次。嘗試使用關鍵字「DOM」進行搜索。 – Gordon 2011-03-07 12:58:22