如何使用正则表达式替换PHP中除第一个字符外的所有字符



给定一个存储为单个字符串的地址,用换行符分隔其组件,如:

1 StreetnCitynSTn12345

目标是将除第一个换行符外的所有换行符替换为空格,以便将其呈现为:

1 Street
City ST 12345

我尝试过这样的方法:

[$street, $rest] = explode("n", $input, 2);
$output = "$streetn" . preg_replace('/n+/', ' ', $rest);

我一直在尝试使用正则表达式的一行代码来实现同样的结果,但不知道如何实现。

我建议不要用复杂的正则表达式来解决这个问题,而是像下面这样保持简单。您可以用n分割字符串,弹出第一个分割,然后用空格内爆其余部分。

<?php
$input = explode("n","1 StreetnCitynSTn12345");
$input = array_shift($input) . PHP_EOL . implode(" ", $input);
echo $input;

在线演示

您可以在这里使用regex技巧,通过反转字符串,然后替换n的每一个出现,前提是我们可以向前看并找到至少一个其他n:

$input = "1 StreetnCitynSTn12345";
$output = strrev(preg_replace("/n(?=.*n)/", " ", strrev($input)));
echo $output;

此打印:

1 Street
City ST 12345

您可以使用lookbacking模式来确保匹配的行前面有换行符。捕获行而不是尾部换行符,并将其替换为同一行但带有尾部空格:

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

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

您可以使用匹配前两行或换行符的交替模式,捕获不带换行符的前两行,并用捕获的内容和空格替换匹配:

preg_replace('/(^.*n.*)n|n/', '$1 ', $input)

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

我给您留下另一种方法,只要满足条件,regex就是正确的,这样它总是可以工作

$string=explode("/","1 StreetnCitynSTn12345");
$string[0]."<br>";
$string[1]." ".$string[2]." ".$string[3]

最新更新