簡體   English   中英

PHP使用重疊正則表達式替換字符串

[英]PHP replace string using overlapping regular expressions

如何使用重疊正則表達式替換字符串?

你好! 我試圖將html標簽添加到字符串中。 我使用函數preg_replace(),但當我的數組中的模式重疊時,preg_replace不起作用。

$string = 'abc';
$patterns[0] = '/a/';
$patterns[1] = '/abc/';
$replacements[0] = '<b>$0</b>';
$replacements[1] = '<i>$0</i>';
echo preg_replace($patterns, $replacements, $string);

這產生以下輸出:

<b>a</b>bc

但我期待這個輸出:

<b><i>a</b>bc</i>

似乎preg_replace采用第一個模式並用第一個替換替換它,然后搜索第二個模式,但它搜索修改后的字符串。 我必須使用支持正則表達式的函數。

這是因為它們不是同時運行,而是循環運行。 在第一次表達之后,你最終會得到<b>a</b>bc因此第二個表達式不再有任何abc匹配。

就是這樣。 這很好,因為謝謝你 不會以無效標記結束 你會。 正則表達式是HTML或XML的嚴重問題。

使用一些DOM解釋器和庫,比如PHP的DOMDocument

暫無
暫無

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

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