簡體   English   中英

如何在未知值上使用preg_replace_callback?

[英]how do I use preg_replace_callback on unknown values?

今天我得到了一些很好的幫助,開始了解具有已知值的preg_replace_callback。 但現在我想解決未知的價值觀。

$string = '<p id="keepthis"> text</p><div id="foo">text</div><div id="bar">more text</div><a id="red"href="page6.php">Page 6</a><a id="green"href="page7.php">Page 7</a>';

使用它作為我的字符串,我將如何使用preg_replace_callback從div和標簽中刪除所有id,但保留p標簽的id?

從我的字符串

<p id="keepthis"> text</p>
<div id="foo">text</div>
<div id="bar">more text</div>
<a id="red"href="page6.php">Page 6</a>
<a id="green"href="page7.php">Page 7</a>

<p id="keepthis"> text</p>
<div>text</div>
<div>more text</div>
<a href="page6.php">Page 6</a>
<a href="page7.php">Page 7</a>

不需要回調。

$string = preg_replace('/(?<=<div|<a)( *id="[^"]+")/', ' ', $string);

現場演示

但是在使用preg_replace_callback

echo preg_replace_callback(
    '/(?<=<div|<a)( *id="[^"]+")/',
    function ($match)
    {
        return " ";
    },
    $string
 );

演示

對於您的示例,以下應該工作:

$result = preg_replace('/(<(a|div)[^>]*\s+)id="[^"]*"\s*/', '\1', $string);

雖然通常你最好避免使用正則表達式解析HTML並使用適當的解析器(例如將HTML加載到DOMDocument並使用removeAttribute方法,就像在這個答案中一樣 )。 這樣您就可以更好地處理標記和格式錯誤的HTML的變化。

暫無
暫無

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

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