我正在尝试编写一个正则表达式,只要该单词不是AND
,OR
,NOT
,就会找到一个后跟空格的单词。
我在搜索类似的问题后尝试了一个负面的预测,这是我现在的正则表达式:(?!AND|OR|NOT).*?\\s
如果我用“AND”尝试这个,我会在“ND”上得到一个匹配。如果我尝试“或”,我会得到“R”,如果我尝试“不”,我会得到“OT”。
有人可以帮忙吗?
答案 0 :(得分:5)
尝试使用此模式:
\\b(?!(?:AND|OR|NOT)\\b)[a-zA-Z]+\\s
我添加了一些单词边界(\ b)并使用了字符类[a-zA-Z]
(在不区分大小写的上下文中可以用[a-z]替换它)以避免延迟量词。
或更高性能(不区分大小写):
\\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|$)))
\\b(?!(?:AND|OR|NOT)\\b)[a-zA-Z]+\\b
答案 1 :(得分:3)
(?<=\bAND|\bOR|\bNOT)\s.*
这将与评论中的XYZ
匹配(但前面有白色字符)。我在中间添加了一个单词后测试了它here。
编辑:如果右侧没有其他字符,您需要最后三个字符,则可以使用以下任一字符:
\w+$
或:
[^\s]+$