繁体   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