Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 附加到每个正则表达式结果_Php_Regex - Fatal编程技术网

Php 附加到每个正则表达式结果

Php 附加到每个正则表达式结果,php,regex,Php,Regex,假设我们有一个类似“CS x1CD x2CE x3”的文本 我想做的是用x1\n替换每个x1,用x2\n替换x2,用x3\n替换x3,等等。在运行期间,这些值将是什么,目前还不知道,但基本上在每个x[0-9]+之后,我们希望添加一个换行符 我该怎么做?我试着使用正则表达式,比如 preg_replace("/x[0-9]+/", "${1}\n", $request['item_name']); 但这不起作用,因为它只使用第一个结果 试试这个: preg_replace("/(x[0-9]

假设我们有一个类似“CS x1CD x2CE x3”的文本

我想做的是用x1\n替换每个x1,用x2\n替换x2,用x3\n替换x3,等等。在运行期间,这些值将是什么,目前还不知道,但基本上在每个x[0-9]+之后,我们希望添加一个换行符

我该怎么做?我试着使用正则表达式,比如

preg_replace("/x[0-9]+/", "${1}\n", $request['item_name']);
但这不起作用,因为它只使用第一个结果

试试这个:

 preg_replace("/(x[0-9]+)/","${0}\n",$request['item_name']);
<?php
$string  = $request['item_name'];
$string  = preg_replace('/(x\d+)/', '$1\n', $string);
echo $string;
?>

您正在寻找以下内容

preg_replace('/x[0-9]+/', '${0}' . "\n", $request['item_name']);
请参阅。

尝试以下操作:

 preg_replace("/(x[0-9]+)/","${0}\n",$request['item_name']);
<?php
$string  = $request['item_name'];
$string  = preg_replace('/(x\d+)/', '$1\n', $string);
echo $string;
?>

演示


您可以避免使用
\K
引用捕获组:

$result = preg_replace("/x[0-9]+\K/", "\n", $request['item_name']);
\K
删除匹配结果左侧的所有内容

如果您的服务器运行在linux/unix系统上,则可以使用PHP_EOL跳过卷曲/双引号/单引号/换行符问题的大部分:

$result = preg_replace("/x[0-9]+/", '$0' . PHP_EOL, $request['item_name']);

使用
0
而不是
1
“${0}”。“\n”
:p大括号正则表达式语法只能在单引号内使用。如果使用单引号,
\n
将被解释为文字
\n
(而不是换行符)。解决办法是使用@HamZa所说的内容。请参阅。最好改用
${1}
,因为
preg_replace()
有一个不明确的地方。@AmalMurali:这里没有歧义。@CasimiritHippolyte:目前没有,没有。但有可能。安全总比遗憾好;-)伙计,那是克莱弗+你赢了我我同意。