gpt4 book ai didi

php - 删除字符串中连续的重复单词

转载 作者:可可西里 更新时间:2023-11-01 00:56:11 27 4
gpt4 key购买 nike

我正在尝试编写一个函数来删除字符串中连续的重复单词。保留正则表达式找到的任何匹配项至关重要。换句话说……

A very very very dirty dog

应该变成...

A very dirty dog

我有一个似乎运行良好的正则表达式 ( based on this post )

(\b\S+\b)(($|\s+)\1)+

但是我不确定如何使用 preg_replace(或者如果有更好的函数)来实现它。现在,我让它删除了所有匹配的重复单词,而没有完整保留该单词的一个副本。我可以解析变量或特殊指令以保持匹配吗?

我现在有这个...

$string=preg_replace('/(\b\S+\b)(($|\s+)\1)+/', '', $string);

最佳答案

您可以使用像 \b(\S+)(?:\s+\1\b)+ 这样的正则表达式并替换为 $1:

$string=preg_replace('/\b(\S+)(?:\s+\1\b)+/i', '$1', $string);

参见 regex demo

详细信息:

  • \b(\S+) - 第 1 组捕获一个或多个以单词边界开头的非空白符号(也许 \b(\w+) 会在这里更适合)
  • (?:\s+\1\b)+ - 1 个或多个序列:
    • \s+ - 1 个或多个空格
    • \1\b - 对存储在 Group 1 缓冲区中的值的反向引用(该值必须是一个完整的单词)

替换模式是 $1,替换反向引用引用存储在第 1 组缓冲区中的值。

请注意,/i 不区分大小写修饰符将使 \1 不区分大小写,而 I have a dog Dog DOG 将导致 我有一只狗

关于php - 删除字符串中连续的重复单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42602305/

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