2010-07-14 95 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

相关问题