簡體   English   中英

如何使用正則表達式替換除 PHP 中第一個字符之外的所有字符?

[英]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)

演示: https://onlinephp.io/c/2fb2f

您可以使用lookbehind 模式來確保匹配行前面有一個換行符。 捕獲該行但不捕獲尾隨換行符,並將其替換為同一行但尾隨空格:

preg_replace('/(?<=\n)(.*)\n/', '$1 ', $input)

演示: https://onlinephp.io/c/5bd6d

我留給你另一種方法,只要滿足條件,正則表達式就是正確的,這樣它總是有效的

$string=explode("/","1 Street\nCity\nST\n12345");

$string[0]."<br>";
$string[1]." ".$string[2]." ".$string[3]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM