簡體   English   中英

正則表達式替換括號之間的html標簽

[英]Regex to replace html tags between parenthesis

我需要替換放在括號之間的html標簽。 以下是我的代碼。 任何幫助,將不勝感激。

$string  = '<table><tr>Hello{<strong><br/>name<br/></strong>}</tr></table>';
echo preg_replace("/\{<.*?>\}/","",$string);

所需的輸出是

<table><tr>Hello name</tr></table>

@Diksha試試這個:

$string  = '<table><tr><td>Hello {<strong><br/>name<br/></strong>}</td></tr></table>';


echo $str = preg_replace_callback("/\{<.*?>\}/", function($m){
    return preg_replace('/\{|\}/',"",strip_tags($m[0]));
}, $string);

您不能僅使用一個簡單的正則表達式來完成此操作,但是可以使用正則表達式來找到下面的括號

function process_paranthesis($match) {
  return strip_tags($match[1]);
}

$string  = '<table><tr>Hello { <strong>name</strong>}</tr></table>';
echo preg_replace_callback("/\{([^\}]*)\}/", "process_paranthesis",$string);

RegEx已修改為僅查找所有{...}塊,我們使用preg_replace_callback() ,該函數調用一個函數,該函數計算要替換為匹配項的字符串。 回調函數的參數$ match以各種方式包含有關匹配的信息。 $ match [0]包含比賽的整個文本,$ match [1]包含比賽中第一個括號內的文本。 然后,在回調函數中使用函數strip_tags()刪除所有HTML標簽。 這是預定義的功能,應該代替重新發明輪子。

RegEx的構造如下:

  1. 的匹配具有開始{並結束與} ; 我們需要對其進行轉義,因此我們使用\\{ ... \\}
  2. 我們希望處理所有內容,但周圍的{} )\\} ,因此我們將圓括號放在\\{( ... )\\} ,然后將花括號中的全部內容作為$ match [1]來獲取,而無需進一步通過使用其他字符串函數刪除那些花括號。
  3. 我們希望允許{}之間的所有字符,除了}本身; 我們使用[^\\}] ,它匹配除}所有字符; 並且我們想允許它們多個,結果是: [^\\}]*

注意: .*是貪婪的。 因此,如果僅使用.*而不是[^\\}]*則在有多個花括號塊的情況下,我們會得到怪異的結果。 匹配將從字符串中的第一個開頭{開始,最后一個}結束,並將包含所有塊及其之間的所有內容。 這將匹配如下:“ {in first} something between {and second one}短信。還有更多。” -但我們希望它像這樣匹配:“在{and second one}之間的{in first}文本中輸入文本。還有更多。”對嗎?

暫無
暫無

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

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