在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 '
<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"
如何解决这个问题?
答案 0 :(得分:1)
默认.
匹配除\n
(LF)之外的所有内容。但是,您使用Windows样式\r\n
(CRLF)换行符。因此,\r
包含在匹配中。
你可能想要的是:
preg_replace('/(*ANYCRLF)^(.*) - (.*) - (.*)$/m', '$1 - $2 "$3"', $text);
(*ANYCRLF)
修饰符将.
的含义更改为接受除\r
和\n
之外的所有字符。
答案 1 :(得分:0)
$text_replaced = preg_replace('/^(.*) - (.*) - (.*)[' . PHP_EOL . ']$/m', '$1 - $2 "$3"', $text);