2013-05-11 48 views
3

我想寫一個正則表達式會發現是後面有一個空格,只要這個詞是不是ANDORNOT任何單詞的列表。排除模式正則表達式忽略的話

我已經尋找類似的問題後,嘗試了負先行,這是我目前正則表達式:(?!AND|OR|NOT).*?\\s

如果我嘗試這與「AND」我得到的「ND」的匹配。如果我嘗試使用「或」,我會得到「R」,如果我嘗試使用「不」,我會得到「OT」。

任何人都可以幫忙嗎?

+0

試試這個 - ' (?!(AND | OR | NOT))。* \ s' – Bill 2013-05-11 15:55:24

+0

試過了,它在第一個字符後仍然返回一個匹配。 – GPW 2013-05-11 15:58:30

+2

我們可以看到您想要匹配的字符串嗎?這是什麼語言? – 2013-05-11 15:58:46

回答

4

嘗試使用這種模式:

\\b(?!(?:AND|OR|NOT)\\b)[a-zA-Z]+\\s 

我已經添加了一些字邊界(\ b)和所使用的字符類[a-zA-Z](可以在不區分大小寫上下文由[AZ]代替它),以避免懶惰的量詞。

或更好的性能(與不區分大小寫):

\\b(?>(?>[b-mp-z])|(?!(?>and|or|not)\\b)[aon])(?>[a-z]*)\\s 

,如果你想匹配:雙引號之間

  • 話沒有雙引號或空格:

(?<=(\"?)\\b)(?!(?:AND|OR|NOT)\\b)[a-zA-Z]+(?=\\1(?:\\s|$))

  • 雙引號之間的話用雙引號:

(\"?)(?<=\\b)(?!(?:AND|OR|NOT)\\b)[a-zA-Z]+\\1(?=\\s|$)

  • 括號之間無話括號:括號和雙間

(?<=(\\()\\b)(?!(?:AND|OR|NOT)\\b)[a-zA-Z]+(?=(?(1)\\)|(?:\\s|$)))

  • 話沒有兩個引號:

(?<=(\\()?(\"?)\\b)(?!(?:AND|OR|NOT)\\b)[a-zA-Z]+(?=(?(1)\\)|\\2(?:\\s|$)))

  • 話不在AND OR NOT沒有所有你想要的:

\\b(?!(?:AND|OR|NOT)\\b)[a-zA-Z]+\\b

+0

這似乎是工作,但我需要它來匹配「和(也因此,例如 名稱:‘特殊’之一,‘XYZ’ 我改變了查詢: \\ b(?!(?: AND | OR | NOT)\\ b)[a-zA-Z \\\「] + \\ s(在末尾添加\\\」) 但它只是能趕上最後「的字樣,例如 特殊」和XYZ」 任何建議 – GPW 2013-05-11 19:31:25

+0

@ user2367873:?你想趕上雙引號之間的話,但是你要趕上他們用雙引號或不? – 2013-05-11 19:50:10

+0

我覺得我很好現在,我添加了一個「?(?在開始時捕捉任何引號或括號,並更改結尾部分以捕捉任何內容。 基本上我試圖解析一個具有不同可能性的大型查詢。 我有2個正則表達式捕捉前兩個可能性,這一個是得到任何剩下的東西,這不是其中的一個關鍵字。 我的查詢現在:\「?(?\ b(?!(?: AND | OR | NOT)\ b)。+?\\ s 我認爲這會抓住0-1」或那麼邊界不會給出AND | OR | NOT,然後不理會任何東西,直到一個空格。這聽起來是否正確? – GPW 2013-05-11 19:55:49

3

嗯,我不是100%肯定,如果我理解正確的,但你可以試試這個,看看你是在找什麼?

(?<=\bAND|\bOR|\bNOT)\s.* 

這將匹配您的評論XYZ(雖然與之前的白色字符)。我在兩者之間添加一個單詞後測試了它here

編輯:如果沒有更多的字符的權利和您所需要的最後三個字符,你可以使用兩種:

\w+$ 

或:

[^\s]+$ 
+0

+1分享http://www.regex101.com/ – Bill 2013-05-11 17:11:59

+0

所以這隻會匹配後面的單詞是否正確,這是一個積極的後顧之憂? 它的作品,我認爲在這種情況下(其中一個詞是第一個),但不是如果他們不是 我需要它來匹配任何不是它們的單詞,所以它可能是這樣的: 名稱:測試IBM 我有另一個獲得名稱:測試的表達式。我需要這個來讓IBM在這裏。 我有幾個表達式,每個表達式分別得到不同的情況,這一個是捕獲剩下的東西,但不是那3個關鍵字。 – GPW 2013-05-11 19:36:03

+0

等一下,我才意識到一些東西......右邊有更多的字符嗎?如果沒有,你可以使用一個簡單的'[^ \ s] + $'或'\ w + $'。 – Jerry 2013-05-11 19:51:52