2015-04-20 112 views
-1

一次假设我有一个很长的字符串,如:允许串仅在正则表达式

helloABCABC 100gABC 

,我要删除ABC子之一,所以它仅显示了它的第一次出现。

所需的输出是:

helloABC 100g 

我试着用积极的前瞻,但它没有工作这么好。

任何想法?

+2

你能不能展示你的前瞻?你使用什么语言,JavaScript? –

+2

双'l'也应该在'hello'中替换。这里有一个合乎逻辑的失败...... – HamZa

回答

0

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

ABC(?=.*?ABC) 

Here你可以找到一个演示。

+0

非常感谢enrico.bacis!我们可以为此处理一般情况吗? – Gck

0

无需正则表达式:

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

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

+0

我编辑了这个问题。有什么建议么?!我失去了 – Gck

+0

@Gck你甚至尝试过我的解决方案吗?它也适用于您的编辑。 – steffen

+0

问题是我应该用正则表达式来完成它,因为我在脚本中运行它之后,所以除了正则表达式之外我实际上不能实现任何东西。 – Gck

1

你可以do this然后replace with $1

(.{2,})\1+ 

Regular expression visualization

但@HamZa是绝对正确的,你可能赶上的事情,是完全合法的。我做了这样的重复字符串需要至少有2个字符(所以4个字符,包括其第一个重复)。但是这并不能消除逻辑问题。

你可以在上面看到regex101 demo这个单词hottentottententententoonstelling这是一个荷兰语(我的语言)被正则表达式误用正则表达式替换的合法词。我相信你可以用英语或你选择的语言思考这样的场景。