排除模式正则表达式忽略的话
我想写一个正则表达式会发现是后面有一个空格,只要这个词是不是AND
,OR
,NOT
任何单词的列表。排除模式正则表达式忽略的话
我已经寻找类似的问题后,尝试了负先行,这是我目前正则表达式:(?!AND|OR|NOT).*?\\s
如果我尝试这与“AND”我得到的“ND”的匹配。如果我尝试使用“或”,我会得到“R”,如果我尝试使用“不”,我会得到“OT”。
任何人都可以帮忙吗?
尝试使用这种模式:
\\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
这似乎是工作,但我需要它来匹配“和(也因此,例如 名称:‘特殊’之一,‘XYZ’ 我改变了查询: \\ b(?!(?: AND | OR | NOT)\\ b)[a-zA-Z \\\“] + \\ s(在末尾添加\\\”) 但它只是能赶上最后“的字样,例如 特殊”和XYZ” 任何建议 – GPW 2013-05-11 19:31:25
@ user2367873:?你想赶上双引号之间的话,但是你要赶上他们用双引号或不? – 2013-05-11 19:50:10
我觉得我很好现在,我添加了一个“?(?在开始时捕捉任何引号或括号,并更改结尾部分以捕捉任何内容。 基本上我试图解析一个具有不同可能性的大型查询。 我有2个正则表达式捕捉前两个可能性,这一个是得到任何剩下的东西,这不是其中的一个关键字。 我的查询现在:\“?(?\ b(?!(?: AND | OR | NOT)\ b)。+?\\ s 我认为这会抓住0-1”或那么边界不会给出AND | OR | NOT,然后不理会任何东西,直到一个空格。这听起来是否正确? – GPW 2013-05-11 19:55:49
嗯,我不是100%肯定,如果我理解正确的,但你可以试试这个,看看你是在找什么?
(?<=\bAND|\bOR|\bNOT)\s.*
这将匹配您的评论XYZ
(虽然与之前的白色字符)。我在两者之间添加一个单词后测试了它here。
编辑:如果没有更多的字符的权利和您所需要的最后三个字符,你可以使用两种:
\w+$
或:
[^\s]+$
+1分享http://www.regex101.com/ – Bill 2013-05-11 17:11:59
所以这只会匹配后面的单词是否正确,这是一个积极的后顾之忧? 它的作品,我认为在这种情况下(其中一个词是第一个),但不是如果他们不是 我需要它来匹配任何不是它们的单词,所以它可能是这样的: 名称:测试IBM 我有另一个获得名称:测试的表达式。我需要这个来让IBM在这里。 我有几个表达式,每个表达式分别得到不同的情况,这一个是捕获剩下的东西,但不是那3个关键字。 – GPW 2013-05-11 19:36:03
等一下,我才意识到一些东西......右边有更多的字符吗?如果没有,你可以使用一个简单的'[^ \ s] + $'或'\ w + $'。 – Jerry 2013-05-11 19:51:52
试试这个 - ' (?!(AND | OR | NOT))。* \ s' – Bill 2013-05-11 15:55:24
试过了,它在第一个字符后仍然返回一个匹配。 – GPW 2013-05-11 15:58:30
我们可以看到您想要匹配的字符串吗?这是什么语言? – 2013-05-11 15:58:46