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
$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);
我有
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
$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);