6

我正在尝试编写一个正则表达式,只要该单词不是AND, OR, ,它就会找到后跟空格的任何单词NOT

在搜索类似问题后,我尝试了否定前瞻,这是我当前的正则表达式:(?!AND|OR|NOT).*?\\s

如果我用“AND”尝试这个,我会在“ND”上得到匹配。如果我尝试使用“OR”,我会得到“R”,如果我尝试使用“NOT”,我会得到“OT”。

任何人都可以帮忙吗?

4

2 回答 2

5

试试这个模式:

\\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

于 2013-05-11T16:12:07.450 回答
3

嗯,我不能 100% 确定我是否理解正确,但你能试试这个,看看它是否是你要找的吗?

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

这将XYZ在您的评论中匹配(尽管使用前面的白色字符)。我在中间加了一个词后在这里测试了它。

编辑:如果右边没有更多字符并且您需要最后三个字符,则可以使用以下任一字符:

\w+$

或者:

[^\s]+$
于 2013-05-11T16:37:47.713 回答