2012-09-13 60 views
4

是否有可能編寫一個匹配[a-zA-Z]{2,4}但不匹配test這個詞的正則表達式?或者我需要通過幾個步驟來過濾?正則表達式:匹配模式但不是某個詞

+1

小費:始終指定您正在使用的語言和正則表達式引擎;他們往往不同。 – ruakh

+0

如果您打算替換字符串中的每個2-4個字符的單詞,則應該提及,因爲根據「測試」的解決方案部分也可以匹配。但有其他的解決方案更有幫助 – Hachi

+0

沒有它的只是匹配一個像這樣的字符串:'foobar.aaa.dsf',但有像'foobar.test.dsf'字符串我不想匹配。所以它不是要替換一些東西。 – reox

回答

12

當然,你可以使用negative lookahead

(?!test)[a-zA-Z]{2,4} 

我不知道,如果你需要它,你在做什麼,但請注意,您可能需要使用開始和結束錨(^$)如果你正在檢查的整個輸入與該模式匹配。否則,它可能會匹配ouaeghAEtest之類的東西,因爲它仍然會找到四個不是「測試」的字符。

+0

另外,對於多個單詞排除:'(?![test1,test2])[a-zA-Z] {2,4}' – shrx

+1

@shrx不完全。你已經使用了一個字符類,所以如果它是列表中的一個,那麼只能匹配第一個字符。 ([圖](https://www.debuggex.com/r/LyIpMYTAhJ9Gja4x))所以它會拒絕任何以't','e','s','1',',',或'2'。使用管道「或」運算符代替:'(?!test | foo | bar)[a-zA-Z] {2,4}'([diagram](https://www.debuggex.com/r/Y3oVV178HTqb6LRw )) – Wiseguy

-1
[A-Za-su-z][A-Za-df-z]{0,1}[A-Za-rt-z]{0,1}[A-Za-su-z]{0,1} 

只是一個想法,還沒有使用真正的代碼試圖

+0

這會拒絕許多其他字符串,例如'tree'。 – verdesmarald