之間的HTML標籤我需要更換放在括號之間的HTML標籤。以下是我的代碼。任何幫助,將不勝感激。正則表達式替換括號
$string = '<table><tr>Hello{<strong><br/>name<br/></strong>}</tr></table>';
echo preg_replace("/\{<.*?>\}/","",$string);
需要的輸出是
<table><tr>Hello name</tr></table>
之間的HTML標籤我需要更換放在括號之間的HTML標籤。以下是我的代碼。任何幫助,將不勝感激。正則表達式替換括號
$string = '<table><tr>Hello{<strong><br/>name<br/></strong>}</tr></table>';
echo preg_replace("/\{<.*?>\}/","",$string);
需要的輸出是
<table><tr>Hello name</tr></table>
你不能做到這一點只用一個簡單的正則表達式,但你可以使用正則表達式查找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標籤。這是一個預定義的功能,應該用來代替重新發明輪子。
正則表達式被構造如下:
{
開始和以}
結束;我們需要逃避它,所以我們使用\{
... \}
。{
和}
,所以我們把圓paranthesis內:\{(
... )\}
,然後將得到的花括號內$整個內容匹配[1]沒有進一步需要刪除那些花括號使用其他字符串函數。{
和除}
本身}
之間的所有字符;我們使用[^\}]
,它匹配每種字符,但是}
;並且我們希望允許它們中的多個,導致:[^\}]*
注意:.*
是貪婪的。所以,如果我們只是使用.*
而不是[^\}]*
,那麼在有多個花括號的塊的情況下,我們會得到奇怪的結果。本場比賽將開始在字符串中的第一開口{
和結束在最後}
,並會包含所有塊和它之間的一切。這會匹配如下:「文本{in first} something between {and second one}
。還有一些。」 - 但我們希望它能像這樣匹配:「文字{in first}
之間的東西{and second one}
。還有更多。」,對吧?
@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);
嗯,這是行不通的。你有'{空格<',你的正則表達式不允許這個空間... –
空間不是必需的 – DevOps
當然不是,這就是爲什麼你的正則表達式不匹配任何東西。你實際上是在說「找一個'{'後面跟着一個'<'」,而這在你的示例文本中是不存在的。你的文本是「{」後面跟着一個空格,後面跟着一個「<」。 –