2013-08-23 20 views
15

我想用一個正則表達式來查找一個字符串的一部分,並選擇一切直到該字符串。例如,如果我的字符串是this/is/just.some/test.txt/some/other,我想要搜索.txt,並且當我找到它時,請選擇之前和最多.txt正則表達式來選擇一個特定文本之前和之後的所有內容

+0

通過「選擇一切之前和最多.txt」,你的意思是「選擇一切之前,包括.txt」?如果是這樣,到目前爲止的答案是不正確的。否則,「之前」和「最多」是多餘的。 –

+0

@Jim L - 我會說他的意思是達到.txt的結尾,而不是達到.txt的開頭 – pguardiario

+0

在.txt之前只能捕獲完整單詞的解決方案是什麼?在這種情況下「測試」。 –

回答

27

執行下面的正則表達式後,您的答案是在第一次捕獲。

/^(.*?)\.txt/ 
+2

不錯,打我一拳。請注意,根據您使用的正則表達式引擎,您可能不需要包裝'/' – vroomfondel

+0

是的,好點。我在Vim,Ruby或JS 24/7,我總是忘記這個>。 kikuchiyo

20

這符合一切都交給名爲 「.txt」(不包括它):

^.*(?=(\.txt))

+1

+1爲零寬度正向超前斷言。並不是說在這種情況下它確實有很大的不同。 –

+0

讓我們說你想http://url.com/users/2/some/stuff/after http://url.com/users/2,你怎麼也包括匹配器? – Ben

4

你可以只是做...

(.*?)\.txt 

tested here..

+0

不能工作的原因有兩個:你不是逃避''',''*'是貪婪的。那麼abctxt呢? (abc,而不是不匹配)和abc.txt.txt? (abc.txt,而不是abc) – vroomfondel

+0

+1,這實際上比我的回答更好,因爲我實際上並不需要我的正則表達式中的^(是多餘的)。 – kikuchiyo

1

直至幷包括txt您需要更改您的r像這樣的egex:

^(.*?\\.txt) 
相關問題