簡體   English   中英

如何將Regex用於靜態HTML代碼(PHP)

[英]How to use Regex for Static HTML code (PHP)

我是Regualr Expressions的新手,但現在還沒有掌握。

我已經使用CURL和PHP從給定的網頁中獲取了html內容。 該網頁永遠不會改變其結構。 頁面上的結果取決於搜索功能,但是html標記始終相同。 我需要根據輸入的搜索詞從頁面中獲取結果數據。

我需要的數據是:

<h1 class="location_only">(555) 555-5555 is a Landline</h1>

所以我需要抓住兩者之間的任何東西

<h1 class="location_only"></h1>

如果我有$data ,這就是生成的HTML,那么如何將其放入正則表達式中並回顯作為$result找到的數據?

請不要使用正則表達式來解析HTML。

請使用HTML解析器,例如Simple HTML DOM Parser 您的問題似乎已本地化,但事實並非如此。 即使是這樣,這種類型的問題在以后的范圍中也會有很大的相似性,即使您可以使它與正則表達式一起使用,也會使您非常頭疼。

您可以使用以下搜索模式在標簽之間選擇文本:

<span id="result1">(.*?)</span>

如果您的代碼為: <span id="result1">(555) 555-5555 is a Landline</span>捕獲組將返回“(555)555-5555是座機”。

有關如何回顯結果的更多信息,請參見preg_match()

還像其他人建議的那樣研究HTML DOM分析器。 也許我根本不應該回答...

您無法使用正則表達式可靠地從HTML提取信息。 但是,您可以使用HTML解析器,例如DOMDocument :: LoadHTML 這將從字符串中獲取HTML,然后可以使用諸如getElementByIdgetElementByTagName之類的函數來查找值。 還有其他HTML解析器。

這兩個答案都告訴您不要使用Regex而是使用DOM解析器都是正確的,但是,如果頁面的結構沒有改變,考慮到您的位置非常正確,快速而骯臟的regex將可以解決問題和終點供參考。

您已經足夠小心, 不要使用正則表達式來解析HTML 因此,以下是基於DOM解析器的代碼來提取您的值:

$html = <<< EOF
<html>
<head>
<title>Some Title</title>
</head>
<body>
<H1 class="location_only">(555) 555-5555 is a Landline</H1>
</body>
</html>
EOF;
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$value = $xpath->evaluate("string(//h1[@class='location_only']/text())"); 
echo "Your H1 Value=[$value]\n"; // prints text between <h1> and </h1>

輸出:

Your H1 Value=[(555) 555-5555 is a Landline]

暫無
暫無

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

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