在正则表达式中只允许字符串一次

时间:2015-04-20 08:25:40

标签: regex

假设我有一个很长的字符串,如:

helloABCABC 100gABC

我想删除其中一个ABC子串,因此它只显示第一次出现。

所需的输出是:

helloABC 100g

我尝试了积极的前瞻,但它没有那么好用。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

你可以do this然后replace with $1

(.{2,})\1+

Regular expression visualization

但@HamZa绝对是正确的,你可能会发现完全有效的东西。我做了这样,重复的字符串需要至少有2个字符(所以4个字符,包括它的第一次重复)。但这并没有消除逻辑问题。

您可以在上面regex101 demo中看到这个单词hottentottententententoonstelling这是荷兰语(我的语言)中的合法单词被正则表达式替换错误地破坏。我确定你可以用英语或你选择的语言来思考这样的场景。

答案 1 :(得分:0)

您可以使用以下正则表达式:

ABC(?=.*?ABC)

Here你可以找到一个演示。

答案 2 :(得分:0)

不需要正则表达式:

    $index = strpos($str, 'ABC');
    $result = substr($str, 0, $index + 3) . str_replace('ABC', '', substr($str, $index + 3));

这也比使用正则表达式引擎更快。