[英]Need help with regular expressions in PHP
我正在嘗試從共享相同格式的一系列.html內容中索引一些內容。
所以我得到很多這樣的<a href="meh">[18] blah blah blah < a...
: <a href="meh">[18] blah blah blah < a...
想法是提取數字(18)及其旁邊的文本(blah ...)。 此外,我知道,每個符合條件的行會與開始">
和使用END <a
或</p
這個問題是因為需要保持所有其他htmHTML標簽作為文本的一部分莖<i>
, <u>
等等。)。
那么我有這樣的事情:
$docString = file_get_contents("http://whatever.com/some.htm");
$regex="/\">\ [(.*?)\ ] (<\/a>)(.) *?(<)/";
preg_match_all($regex,$docString,$match);
讓我們看看$regex
一秒鍾。 忽略它的空格,我只是將它們放在這里,因為否則某些字符會消失。 我指定它將以">
開頭,然后在[]
輸入數字,然后選擇</a>
。
最后,我做了一個(.)*?(<)
。 這是轉折點。 通過保留最后一位, (<)
,當找到下划線或斜體標記時,文本將被中斷。 但是,如果我放置(<a|</p)
則結果數組最終為空。 我已經嘗試將其改為僅(<a)
,但似乎有2個字符搞亂整個ting。
我能做什么? 我一整天都在苦苦掙扎。
對於給定的示例和說明,類似/">\\[(.*)\\](.*)(?:<(?:a|\\/p))/
似乎可以正常工作,也許添加非捕獲子模式確實可以它?請提供一個反例,其中這不適合您。
雖然我同意RegEx不是解析器,但聽起來你正在尋找的是常規行為字符串的一部分 - 這正是RegEx強大的功能。
如您所見,使用正則表達式來解析HTML並非易事。 這是因為HTML不是特別規則。
我建議使用XML解析器,例如PHP的DomDocument 。
創建一個對象,然后使用loadHTMLFile方法打開該文件。 提取您a
與標簽的getElementsByTagName ,然后提取內容nodeValue屬性。
它可能看起來像
// Create a DomDocument object
$html = new DOMDocument();
// Load the url's contents into the DOM
$html->loadHTMLFile("http://whatever.com/some.htm");
// make an array to hold the text
$anchors = array();
//Loop through the a tags and store them in an array
foreach($html->getElementsByTagName('a') as $link) {
$anchors[] = $link->nodeValue;
}
這種XML / HTML解析器的一種替代方法是phpquery 。 他們頁面上的文檔應該很好地解釋如何提取標簽。 如果您了解jQuery,界面可能看起來更自然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.