我有一些帶有不同電話號碼的 html 頁面。例子:
<p style="text-align: center;">(xxx) xxxx xxxx</p>
<span style="text-align: center;">xxxxxxxxxx</span>
<li style="text-align: center;">(xxx) x xxx xxxx</li>
<p style="text-align: left;">xxxxx xxxx</p>
我想知道使用 php 更改甚至洗掉它們的最佳方法。
我的主要想法是使用 xpath 和 regex 來查找文本,但我相信 regex 不適用于 xpath。
uj5u.com熱心網友回復:
我不熟悉 XPATH,但我找到了一篇很好的文章,可以幫助您在 XPath 運算式中使用 PHP 函式。
你需要創建一個她做的東西的函式:preg_match_all或preg_match或preg_replace。
寫入包含 html 代碼的變數后:
$YourHtmlCode = <<<HTML
'<p style="text-align: center;">(xxx) xxxx xxxx</p>
<span style="text-align: center;">xxxxxxxxxx</span>
<li style="text-align: center;">(xxx) x xxx xxxx</li>
<p style="text-align: left;">xxxxx xxxx</p>';
HTML;
將您的 html 文本轉換為 DOM 檔案,例如:
$dom = new DOMDocument;
$dom->loadHTML($YourHtmlCode, LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD);
使用 registerPHPFunctions 呼叫上述函式后。
我使用(?<=>)(.*?)(?=<)來匹配>和<運算子之間的所有元素。 例子
您可以這樣做以獲取所有零件。
<?php
$reg = '/(?<=\>)(.*?)(?=\<)/m';
$str = '<p style="text-align: center;">(xxx) xxxx xxxx</p>
<span style="text-align: center;">xxxxxxxxxx</span>
<li style="text-align: center;">(xxx) x xxx xxxx</li>
<p style="text-align: left;">xxxxx xxxx</p>';
preg_match_all($reg, $str, $matches, PREG_SET_ORDER);
foreach ($matches as $val) {
echo "matched: " . $val[0] . "\n";
}
?>
之后您可以直接在值中進行修改。
如果你想用正則運算式直接替換值,你可以使用preg_replace。
例如 :
<?php
$reg = '/(?<=\>)(.*?)(?=\<)/m';
$str = '<p style="text-align: center;">(xxx) xxxx xxxx</p>
<span style="text-align: center;">xxxxxxxxxx</span>
<li style="text-align: center;">(xxx) x xxx xxxx</li>
<p style="text-align: left;">xxxxx xxxx</p>';
echo preg_replace($reg, "ReplaceString", $str);
?>
uj5u.com熱心網友回復:
使用正則運算式的示例。周圍的標簽也被洗掉。
((\ |\d|\(|(<.*?>))[\d\-\(\)\. ]{9,}(\.|\n| |<\/.*>)(?!(png|jpg|<)))
例子
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/374415.html
上一篇:當我在C#中顯示從查詢生成的SQL時,最后一部分是什么?我可以洗掉它嗎?
下一篇:如何決議Netlogo中的字串?
