2016-08-30 175 views
-1

之間的HTML標籤我需要更換放在括號之間的HTML標籤。以下是我的代碼。任何幫助,將不勝感激。正則表達式替換括號

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

需要的輸出是

<table><tr>Hello name</tr></table> 
+0

嗯,這是行不通的。你有'{空格<',你的正則表達式不允許這個空間... –

+0

空間不是必需的 – DevOps

+0

當然不是,這就是爲什麼你的正則表達式不匹配任何東西。你實際上是在說「找一個'{'後面跟着一個'<'」,而這在你的示例文本中是不存在的。你的文本是「{」後面跟着一個空格,後面跟着一個「<」。 –

回答

2

你不能做到這一點只用一個簡單的正則表達式,但你可以使用正則表達式查找paranthesis塊作爲follwing

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); 

正則表達式被修改爲找到所有{...} - 塊,並且我們使用preg_replace_callback(),它調用計算匹配將被替換的字符串的函數。回調函數的參數$ match以各種方式包含有關匹配的信息。 $ match [0]包含匹配的全部文本,$ match [1]包含匹配內第一個palenthesis中的文本。 然後在回調函數中使用函數strip_tags()刪除所有HTML標籤。這是一個預定義的功能,應該用來代替重新發明輪子。

正則表達式被構造如下:

  1. A匹配與{開始和以}結束;我們需要逃避它,所以我們使用\{ ... \}
  2. 我們要處理的一切,但周邊{},所以我們把圓paranthesis內:\{( ... )\},然後將得到的花括號內$整個內容匹配[1]沒有進一步需要刪除那些花括號使用其他字符串函數。
  3. 我們希望允許{和除}本身}之間的所有字符;我們使用[^\}],它匹配每種字符,但是};並且我們希望允許它們中的多個,導致:[^\}]*

注意:.*是貪婪的。所以,如果我們只是使用.*而不是[^\}]*,那麼在有多個花括號的塊的情況下,我們會得到奇怪的結果。本場比賽將開始在字符串中的第一開口{和結束在最後},並會包含所有和它之間的一切。這會匹配如下:「文本{in first} something between {and second one}。還有一些。」 - 但我們希望它能像這樣匹配:「文字{in first}之間的東西{and second one}。還有更多。」,對吧?

+0

這工作...真的很感謝。 – DevOps

+0

@Stefan K.說得好。 – Manish

2

@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); 
+0

It作品.. thnks – DevOps

+0

在這裏,馬尼什也很好的工作。只是更快一點,並解釋了一些東西。繼續吧! (upvote) – SDwarfs