2015-04-20 109 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這是一個荷蘭語(我的語言)被正則表達式誤用正則表達式替換的合法詞。我相信你可以用英語或你選擇的語言思考這樣的場景。