0

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

正则表达式:

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

输入字符串:

if x <= 7

输出:

无法识别的令牌:

x , <=

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

4

3 回答 3

1

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

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

或者一些疯狂的后视和负前瞻的组合:

((?<=\A|\s)(?!if|else|\d)\S+)
于 2011-08-30T17:46:01.403 回答
1

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

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

编辑:

事实上,您甚至可能不需要遍历结果。您可能会拆分“过滤器”单词。例如:

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

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

于 2011-08-30T17:28:26.813 回答
0

是的,我必须将词位(if,else,main)分类为标记(关键字)0-9 为 NUM,依此类推...

\b((?!if|else|\d)\w+)\ 哎呀,我的错,它确实有效。我不小心删除了| .

于 2011-08-30T18:03:25.440 回答