2012-04-29 39 views
2

textarea中的preg_replace存在問題。 「$」 或 「米」 修飾符不能正常工作在這裏:preg_replace返回錯誤的換行符?

<?php 

$text = '1 - 2 - 3 
a - b - c 
foo - bar - baz'; 

$text_replaced = preg_replace('/^(.*) - (.*) - (.*)$/m', '$1 - $2 "$3"', $text); 

echo ' 
​<textarea rows=20 cols=20> 
'.$text_replaced.' 
</textarea>​​​​​​​​ 
'; 

應該返回

1 - 2 "3" 
a - b "c" 
foo - bar "baz" 

但它返回

1 - 2 "3 
" 
a - b "c 
" 
foo - bar "baz" 

這又如何解決呢?

嘗試自己:http://codepad.viper-7.com/LqgDHg

回答

1

默認情況下.\n(LF)除了匹配一切。但是,您使用Windows樣式\r\n(CRLF)換行符。因此\r包含在比賽中。

你可能想這是什麼:

preg_replace('/(*ANYCRLF)^(.*) - (.*) - (.*)$/m', '$1 - $2 "$3"', $text); 

(*ANYCRLF)修改改變了.意義對從\r\n接受所有字符分開。

+0

謝謝!這解釋了它。 – Martin

0
$text_replaced = preg_replace('/^(.*) - (.*) - (.*)[' . PHP_EOL . ']$/m', '$1 - $2 "$3"', $text);