儘管多年來一直使用PHP,但我從來沒有真正學會如何使用表達式來正確截斷字符串......現在它在背後咬我!如何刪除標籤之間的文字在PHP?
任何人都可以提供一些幫助截斷這個嗎?我需要砍掉從URL文本部分,把
<a href="link.html">text</a>
到
<a href="link.html"></a>
儘管多年來一直使用PHP,但我從來沒有真正學會如何使用表達式來正確截斷字符串......現在它在背後咬我!如何刪除標籤之間的文字在PHP?
任何人都可以提供一些幫助截斷這個嗎?我需要砍掉從URL文本部分,把
<a href="link.html">text</a>
到
<a href="link.html"></a>
$str = preg_replace('#(<a.*?>).*?(</a>)#', '$1$2', $str)
什麼這樣的事情,考慮到你可能要與其他href
s到重新使用它:
$str = '<a href="link.html">text</a>';
$result = preg_replace('#(<a[^>]*>).*?(</a>)#', '$1$2', $str);
var_dump($result);
這將讓你:
string '<a href="link.html"></a>' (length=24)
(我在考慮你在OP中犯了一個錯字? )
如果您不需要匹配任何其他HREF,您可以使用類似:
$str = '<a href="link.html">text</a>';
$result = preg_replace('#(<a href="link.html">).*?(</a>)#', '$1$2', $str);
var_dump($result);
這也將讓你:
string '<a href="link.html"></a>' (length=24)
作爲sidenote:對於更復雜的HTML,不要嘗試使用正則表達式:它們適用於這種簡單的情況,但對於現實生活中的HTML部分,它們並不真正幫助l:HTML不夠「常規」「足夠」被正則表達式解析。
你可以結合使用子與stringpos沉綿這不是 一個非常好的方法。
檢查:PHP Manual - String functions
另一種方式是寫一個正則表達式匹配您的條件。 但爲了讓你的問題很快得到解決,字符串函數將會做...
編輯:我低估了觀衆。 ;)來吧用正則表達式... ^^
<?php
// example of how to modify anchor innerText
include('simple_html_dom.php');
// get DOM from URL or file
$html = file_get_html('http://www.example.com/');
//set innerText to null for each anchor
foreach($html->find('a') as $e) {
$e->innerText = null;
}
// dump contents
echo $html;
?>
沒有冒犯,但這個答案是8歲,沒有人實際上已經注意到這個答案是不正確的,不起作用。簡單地回顯'$ html'時,foreach循環沒有效果。不能相信這會得到如此之多的選票,而且沒有人真正測試過它。 – 2017-08-16 17:27:11
僅使用strip_tags()
,這將擺脫標籤和它們之間只留下所需的文本
你不需要自己捕獲標籤。只需定位標籤之間的文本並將其替換爲空字符串即可。超級簡單。
代碼:(Demo)
$string='<a href="link.html">text</a>';
echo preg_replace('/<a[^>]*>\K[^<]*/','',$string);
// the opening tag--^^^^^^^^ ^^^^^-match everything before the end tag
// ^^-restart fullstring match
輸出:
<a href="link.html"></a>
或在邊緣情況下,當鏈接文本包含<
,使用此:~<a[^>]*>\K.*?(?=</a>)~
這避免的代價使用惰性量詞捕獲組,fullstring重新啓動\K
和「向前」。
雖然這可行,但您通常不想用正則表達式解析HTML。卡里姆的回答可能更可取。 – Konerak 2011-05-03 16:33:03