[英]How to replace all occurrences of a character except the first one in PHP using a regular expression?
給定一個存儲為單個字符串的地址,並用換行符分隔其組件,例如:
1 Street\nCity\nST\n12345
目標是用空格替換除第一個換行符以外的所有換行符,以便如下所示:
1 Street
City ST 12345
我試過這樣的方法:
[$street, $rest] = explode("\n", $input, 2);
$output = "$street\n" . preg_replace('/\n+/', ' ', $rest);
我一直在嘗試使用帶有正則表達式的單行來實現相同的結果,但無法弄清楚如何。
您可以在這里使用正則表達式技巧,通過反轉字符串,然后替換每次出現的\n
,前提是我們可以向前看並找到至少一個其他\n
:
$input = "1 Street\nCity\nST\n12345";
$output = strrev(preg_replace("/\n(?=.*\n)/", " ", strrev($input)));
echo $output;
這打印:
1 Street
City ST 12345
我建議不要用復雜的正則表達式來解決這個問題,而是保持簡單,如下所示。 您可以使用\n
拆分字符串,彈出第一個拆分並用空格內爆 rest。
<?php
$input = explode("\n","1 Street\nCity\nST\n12345");
$input = array_shift($input) . PHP_EOL . implode(" ", $input);
echo $input;
您可以使用匹配前兩行或換行符的交替模式,捕獲前兩行而不使用尾隨換行符,並將匹配替換為捕獲的內容和空格:
preg_replace('/(^.*\n.*)\n|\n/', '$1 ', $input)
您可以使用lookbehind 模式來確保匹配行前面有一個換行符。 捕獲該行但不捕獲尾隨換行符,並將其替換為同一行但尾隨空格:
preg_replace('/(?<=\n)(.*)\n/', '$1 ', $input)
我留給你另一種方法,只要滿足條件,正則表達式就是正確的,這樣它總是有效的
$string=explode("/","1 Street\nCity\nST\n12345");
$string[0]."<br>";
$string[1]." ".$string[2]." ".$string[3]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.