2012-04-29 11 views
2

テキストエリアの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" 

はどのようにこれを解決することができ返します。 "$" または "M" 修飾子は正常にここで働いていませんか?

は自分で試してみてください。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); 
関連する問題