PHP/Regex - 如何使用 preg_replace 从字符串中删除一个?

PHP/Regex - How to remove one from what found in a string using preg_replace?

我有

aa
aaa
aaaa
aaaaa

我想从课文中找到的内容减少一个单位。这样结果应该是

a
aa
aaa
aaaa

使用 preg_replace

我该怎么做?

编辑

我正在 https://regex101.com 处理它。

正则表达式

(?:<br \/>){5}

和正文

<p>1<br /><br />2<br /><br /><br />3<br /><br /><br /><br />4<br /><br /><br /><br /><br />5</p>.

我想把它放在一个循环中,然后从上到下删除它。所以首先,它删除了重复 5 次然后 4 次然后 3... 的 <br /> 。但这没有用!

你的意思是这样的:

<?php

$data = ['aa',
'aaa',
'aaaa',
'aaaaa',
];

$newdata = [];
foreach ($data as $value) {
    $newdata[] = preg_replace('/(.*).$/', '', $value);
}
var_dump($data, $newdata);

您可以在组 2 中使用带有重复反向引用的捕获组 1。

在替换使用组 2 中,出现次数少于总匹配次数。

(<br />)({1,4})
  • (<br />) 捕获 组 1,匹配 (<br />(请注意,使用像 ~ 这样的分隔符来表示您没有的模式转义反斜杠)
  • ( 捕获 第 2 组
    • {1,4} 反向引用第 1 组,重复 1-4 次
  • ) 关闭组 2

Regex demo

$re = '~(<br />)({1,4})~';
$str = '<p>1<br /><br />2<br /><br /><br />3<br /><br /><br /><br />4<br /><br /><br /><br /><br />5</p>';
$result = preg_replace($re, '', $str);

回显$结果;

echo $result;

输出

<p>1<br />2<br /><br />3<br /><br /><br />4<br /><br /><br /><br />5</p>

数字和尖括号之间有一个单词边界,因此您可以删除每个数字后面的第一个 <br />

$result = preg_replace('~\b<br />~', '', $str);

demo