gpt4 book ai didi

php - 替换两个字符之间的每个实例

转载 作者:可可西里 更新时间:2023-10-31 22:10:09 25 4
gpt4 key购买 nike

我在下面有以下数据,其中 {n} 代表占位符。

{n}{n}A{n}{n}A{n}
{n}A{n}{n}{n}{n}A
{n}{n}A{n}A{n}{n}
{n}{n}{n}A{n}A{n}B
{n}A{n}{n}B{n}{n}
A{n}B{n}{n}{n}{n}

我想用例如字母 C 替换两个 A 字符之间占位符的每个实例。我为此编写了以下正则表达式,并使用了 preg_replace 函数。

$str = preg_replace('~(?<=A)(\{n\})*(?=A)~', 'C', $str);

问题在于它将两个 A 之间的所有实例替换为一个 C。我如何修复我的正则表达式或 preg_replace 调用以将占位符的每个单独实例替换为 C

这应该是我的输出。

{n}{n}ACCA{n}
{n}ACCCCA
{n}{n}ACA{n}{n}
{n}{n}{n}ACA{n}B
{n}A{n}{n}B{n}{n}
A{n}B{n}{n}{n}{n}

但目前它输出这个。

{n}{n}ACA{n}
{n}ACA
{n}{n}ACA{n}{n}
{n}{n}{n}ACA{n}B
{n}A{n}{n}B{n}{n}
A{n}B{n}{n}{n}{n}

最佳答案

您可以通过 \G 锚定来解决问题.

$str = preg_replace('~(?:\G(?!\A)|({n})*A(?=(?1)++A))\K{n}~', 'C', $str);

\G 特征是一个可以匹配两个位置之一的 anchor ;字符串位置的开始或最后一场比赛结束时的位置。 \K 转义序列重置报告匹配的起点,并且不再包含任何先前使用的字符。

要减少回溯量,您可以使用更复杂的表达式:

$str = preg_replace('~\G(?!\A)(?:{n}
|A(?:[^A]*A)+?((?=(?:{n})++A)\K{n}
|(*COMMIT)(*F)))
|[^A]*A(?:[^A]*A)*?(?1)~x', 'C', $str);

关于php - 替换两个字符之间的每个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28492251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com