2016-05-25 125 views
5

我一直在玩正則表達式高爾夫球,並確定了一個正則表達式,它涵蓋了所有我不應該匹配的詞,也沒有包含我應該匹配的詞。這個想法是,我可以簡單地否定正則表達式,然後得到相反的結果(包含我應該匹配的所有單詞,而不包括其他單詞)。如何否定正則表達式?

我想出(\w)(\w)\2\1正則表達式匹配任何帶有圖案abba,所以我想利用負環視(?!(\w)(\w)\2\1)將匹配我什麼不是模式abba的但是現在它只是突出了一切,這裏的網址,如果你想試試看:http://regex.alf.nu/4

+0

如果這是一個選項,使用'grep -v' –

+2

像'^(?!\ w *(\ w)(\ w)\ 2 \ 1)。*'? –

+0

@InnocentBystander它是一個基於Web的界面,所以grep是不允許的 – sreya

回答

3

在我看來,你想排除匹配的字符串,包含那些重複的符號。因此,您需要在字符前添加\w*(0個或更多個字符)來測試重複。

使用

^(?!\w*(\w)(\w)\2\1).* 
    ^^^  

regex demo

因此,(?!\w*(\w)(\w)\2\1) lookahead會在字符串的開頭執行以下檢查:如果有0個字母數字/下劃線字符,後跟第1,2個字符,然後是第1個捕獲的字符,則no匹配被返回(匹配失敗)。

如果您不打算匹配文本(即只檢查是否匹配),則不需要.*部分。但是,如果要排除匹配的空字符串,只需使用.+而不是.*+匹配1次或多次出現次量化子模式)。

+0

啊,錨是必要排除空字符串然後是? – sreya

+0

不,爲了確保字符串不爲空,最後可以使用'。+'。你只是沒有精確地預測空比賽的預期行爲。 –