2013-05-11 74 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