如何在5个字符前打破行数

时间:2014-09-22 14:06:49

标签: php regex

我想在所有5个字符数字之前断线。我怎样才能做到这一点 ? 我得到了什么:

$line[1] = preg_replace('[0-9]{5}', '\r\n\1',$line[1]);
但似乎没有工作。有谁知道我该怎么做? 这是我的字符串示例:

Zum Sonnenhügel 19 37688 Beverungen

所以我想这样做:

Zum Sonnenhügel 19
37688 Beverungen

我有谷歌doc电子表格,其中包含一列这样的地址。但我无法在那里更改它,所以我将其下载为csv,我想在php中编辑它

我得到的错误:

[Symfony\Component\Debug\Exception\ContextErrorException]
Warning: preg_replace(): Unknown modifier '{' in ...\Command\EditCsvCommand.php line 54

3 个答案:

答案 0 :(得分:3)

需要指定正则表达式分隔符,捕获组以使用反向引用。

$line[1] = preg_replace('/([0-9]{5})/', "\r\n\1", $line[1]);

除了使用双引号以使\r\n被正确解释。

我使用了/,但您可以选择其他字符。

<强>更新

正如Blackhole评论的那样,如果您使用$0(匹配的文字),则不需要使用捕获组:

$line[1] = preg_replace('/[0-9]{5}/', "\r\n$0", $line[1]);

答案 1 :(得分:1)

您需要使用$1代替\1

$line[1] = preg_replace('/([0-9]{5})/', "\r\n$1", $line[1]);

答案 2 :(得分:1)

也可以使用lookahead在所需位置插入"\r\n"

$line[1] = preg_replace('/(?=\b\d{5}\b)/', "\r\n", $line[1]);

添加了\b word boundaries以更好地分隔\d部分。

请参阅example on regex101