2010-02-21 88 views
1

我有很长的字符串,可同时容纳所有这些值:str_replace函数在PHP

hello<!>how are you? <!>I am fine<!> What is up? <!> Nothing! 

我需要找到所有这些posibilities:

' <!> ' 
' <!>' 
'<!> ' 
'<!>' 

,代之以他们“\ n“

这可以用str_replace在php中实现吗?

回答

6

如果你只有这4种可能性,是的,那么你可以用str_replace来做到这一点。

$str = str_replace(array(' <!> ', ' <!>', '<!> ', '<!>'), "\n", $str); 

没错,但如果有两个空格?或者一个标签?你为每个添加一个空间案例吗?

您可以添加特殊情况下,为每个的,或使用正则表达式:

$str = preg_replace('/\s*<!>\s*/', "\n", $str); 
+0

这就是它!谢谢! – andufo 2010-02-21 21:36:57

0

编辑:preg_replace('/\s*<!>\s*', PHP_EOL, $string);应该会更好。

当然,str_replace('<!>', "\n", $string);如果您的示例已完成。

4

当然,您可以通过4次致电str_replace来实现此目的。 编辑:我错了。您可以使用str_replace中的数组。

$str = str_replace(' <!> ', "\n", $str); 
$str = str_replace(' <!>', "\n", $str); 
$str = str_replace('<!> ', "\n", $str); 
$str = str_replace('<!>', "\n", $str); 

另外考虑使用strtr,它允许一步完成。

$str = strtr($str, array(
    ' <!> ' => "\n", 
    ' <!>' => "\n", 
    '<!> ' => "\n", 
    '<!>' => "\n" 
)); 

或者你可以使用一个regular expression

$str = preg_replace('/ ?<!> ?/', "\n", $str); 
+0

@codeholic:你不需要4调用str_replace函数。他想替换为“\ n” – 2010-02-21 20:07:01

+0

是的。你是对的。 – codeholic 2010-02-21 20:08:51

1

你当然可以用str_replace函数像这样做:

$needles = array(" <!> ","<!> "," <!>","<!>"); 
$result = str_replace($needles,"\n",$text); 
+0

是的,但如果有两个空格呢?或者一个标签?你为每个添加一个空间案例吗? – 2010-02-21 20:04:11

+1

@ e-satis:要求很明确。如果OP不是指他询问或错过了一些细节,他应该编辑该问题。 – 2010-02-21 20:05:25

0

你不能这样做,只有str_replace。可以使用explode,stripimplode或用户preg_replace的组合。

0

你可以使用:

//get lines in array 
$lines = explode("<!>", $string); 
//remove each lines' whitesapce 
for(i=0; $i<sizeof($lines); $i++){ 
    trim($lines[$i]); 
} 
//put it into one string 
$string = implode("\n", $lines) 

这是一个有点乏味,但这应该工作(也删除两个空格和标签)。 (未测试的代码,所以有可能是错误的)

0

这是一种整齐:

$array = explode('<!>', $inputstring); 
foreach($array as &$stringpart) { 
    $stringpart = trim($stringpart); 
} 
$outputstring = implode("\r\n", $array);