显示无与伦比的字符串,正则表达式否定

时间:2011-08-30 17:23:05

标签: java regex negate

有什么方法可以使用Java显示除了一组单词或数字范围之外的所有字符和字符串?例如:

正则表达式:

^(if|else),[0-9] 

输入字符串:

if x <= 7

输出:

无法识别的代币:

x , <=

由于“if”和7被否定,它们将不会出现。 我可以在一个正则表达式中否定一组字符串和数字范围吗? 或者有没有其他方法可以显示不匹配的字符串? 我们的任务是显示识别的标记,然后显示不匹配的标记。我已经研究和研究了三天的正则表达式,但我仍然无法完成我的任务。提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我会使用String.split()将字符串拆分为标记,然后将每个标记与“过滤器列表”进行比较。

即使您可以使用正则表达式完成此操作,也不会那么简单。

修改

实际上,您甚至可能不需要遍历结果。您可能会拆分“过滤”字样。例如:

String[] results = s.split(" *if *| *else *| *[0-9]+ *| +");

请注意,您必须在表达式中放置一个空格,因为我假设您不希望x <=成为结果中的单个标记。此外,在关键字周围添加空格将确保您的结果集中不会出现空字符串。

答案 1 :(得分:1)

根据问题的复杂程度,您可以尝试使用否定前瞻断言:

\b((?!if|else|\d)\w+)\b

或者是lookbehind和negative lookahead的一些疯狂组合:

((?<=\A|\s)(?!if|else|\d)\S+)

答案 2 :(得分:0)

是的,我必须将lexemes(if,else,main)归类为tokens(关键字) 0-9为NUM,依旧......

\ b((?!if | else | \ d)\ w +)\ oops,我的不好,它确实有效。我不小心删了|