2010-07-14 129 views
1

問題出現在標題中。我試圖用strip_tags,但顯示了空白,我試着使用了preg_replace,但我不太明白明顯的語法..如何將此行「XX <i> r</i><i> n</i>」過濾爲XX?

試過這種

$test = "Home<i>\r</i><i>\n</i>";  
$patterns = array(); 
$patterns[0] = '<i>'; 
$test = preg_replace($patterns, '', $test); 

但回聲$測試還是一樣的!

+0

它總是第2個字符?那麼沒有斜體標籤而不是新行? – 2010-07-14 00:27:09

+0

不是前2個字,不同的單詞。 – ganjan 2010-07-14 00:36:53

回答

4

,怎麼是這樣的:

$test = "Home<i>\r</i><i>\n</i>"; 
preg_match('/^[^<]+/', $test, $match); 
echo $match[0]; 

如果要刪除所有標籤,用strip_tags應該這樣做,或者你可以使用的preg_replace,如:

$test = "Home<i>\r</i><i>\n</i>"; 
$test = preg_replace('/<[^>]+?>/', '', $test); 
echo $test; 
+0

我自己喜歡preg_match,尤其是如果你知道XX在原始問題中的含義。 – Tim 2010-07-14 04:11:51

0

strip_tags會返回XX \ r \ n,因此preg_replace可能會是您正在尋找的,假設它可以實際執行您想要的操作。我不知道自己是否會像想要的那樣去掉標籤,但如果您只是不理解語法,請閱讀here

希望這會有所幫助。如果你只想得到字符串的第一部分到第一標籤

0

問題上的preg_replace你的語法()是你沒有定義圖案作爲準確的正則表達式。如果您使用str_replace(),但您的方法適用於preg_replace(),則識別<i>的正確模式爲'/<i>/'。基本上,你需要把它放在/字符中以將其定義爲正則表達式。

如果您要刪除所有標記,Jonathan的表達式比模式實現要好得多。如果沒有,你可以處理這樣的具體標籤:

$test = "Home<i>\r</i><i>\n</i>";  
$patterns = array(); 
$patterns[0] = '/<\/?i>/'; //removes <i> and </i> 
$patterns[1] = '/\r|\n/'; //removes \r and \n 
$test = preg_replace($patterns, '', $test); 
+2

模式不正確。第一個[0]應該是''/ <\/?i> /'',第二個[1]應該是''/ \ r | \ n /''。它可能只是在第二個刪除斜線或東西。但是它顯示你逃避方括號的方式,而且你可能正在考慮一個組的括號,而不是用大括號來說出任何這些(r | n)字符。此外,如果你正在做的唯一事情是多個事情的或,你甚至不需要分組。如果你將這個組與其他的東西比如一個''/ <\ /?(b | i | u | small | strong | etc)> /'',分組真的只會有用。 – 2010-07-14 05:28:07

+0

你是對的。我想我昨晚在做出瀏覽問題和睡覺之間的決定時做出了錯誤的選擇。相應地調整模式。 – 2010-07-14 12:18:04

相關問題