2

textareaのpreg_replaceで問題が発生しました。ここでは、「$」または「m」修飾子が正しく機能していません。

<?php

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

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

echo '
​&lt;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

4

2 に答える 2

1

デフォルトでは、 (LF).以外のすべてに一致します。\nただし、Windowsスタイル\r\n(CRLF)の改行を使用します。したがって\r、試合に含まれます。

あなたがおそらく欲しいのはこれです:

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

修飾子は、とを除くすべての文字を受け入れる方向(*ANYCRLF)に意味を変更します。.\r\n

于 2012-04-29T16:34:06.787 に答える
0
$text_replaced = preg_replace('/^(.*) - (.*) - (.*)[' . PHP_EOL . ']$/m', '$1 - $2 "$3"', $text); 
于 2012-04-29T16:33:51.030 に答える