2014-09-22 38 views
1

我想在所有5個字符之前打破行號。我怎樣才能做到這一點 ? 我得到了什麼:如何在5個字符之前打破行號

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

,但它似乎不work.Does有誰知道我能做到這一點? 這裏是我的字符串例如:

Zum Sonnenhügel 19 37688 Beverungen 
從這個我想這樣做

這樣:

Zum Sonnenhügel 19 
37688 Beverungen 

我有谷歌文檔與電子表格這樣的地址列。但我無法改變它在那裏,所以我下載爲csv,我想編輯在PHP

錯誤我得到:

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

如果你將要執行的多個字符串這一操作,這將有助於瞭解此字符串的格式爲每串一致。 IE瀏覽器是否每個字符串都有2位數的空格,然後是5位數的空格和名字? – DirtyRedz 2014-09-22 14:10:40

回答

3

需要特別指定正則表達式分隔符,捕獲組以使用反向引用。

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

除此之外使用雙引號使\r\n被正確解釋。

我用/,但你可以選擇其他字符。

UPDATE

由於黑洞評論,如果你使用$0(文本匹配),則不需要使用捕獲組:

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

感謝您的幫助,你們倆都幫助我:) – Vardius 2014-09-22 14:14:37

+0

@Blackhole ,感謝您的評論,我相應地更新了答案。 – falsetru 2014-09-22 14:15:19

1

您需要使用$1代替\1

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

錯誤即時獲取:preg_replace():未知修飾符'{' – Vardius 2014-09-22 14:09:36

+0

@Vardius嘗試更新的答案? – 2014-09-22 14:10:27

+0

很好用,但結果是: 'ZumSonnenhügel19 \ r \ n Beverungen' – Vardius 2014-09-22 14:11:27

1

也可以使用lookahead插入"\r\n"在期望的位置:

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

添加\bword boundaries以更好地分開\d部分。

example on regex101

+1

這是最聰明的答案。 – vks 2014-09-22 14:22:57