正则表达式匹配除flex中的某些单词之外的任何单词

时间:2016-02-29 10:00:40

标签: regex flex-lexer

我想写一个匹配任何单词的正则表达式。 我使用[a-zA-Z]*除了某些字词,例如WORD1WORD2

所以somethingsomething匹配,但WORD1WORD2不匹配。是否有可能在flex?

我试过了:

[a-zA-Z]*|[^"WORD1""WORD2][a-zA-Z]*{-}["WORD1""WORD2"]但不起作用。

(现在我知道他们为什么不工作,但我仍然不知道解决方案。)

2 个答案:

答案 0 :(得分:1)

lex / flex中常用的方法是使用模式和规则的组合来选择所需的行为:

  • 你可以创建一个匹配(并忽略)这些单词的词法分析器,然后通过其他标识符的表达式,或
  • 只需匹配所有标识符,并使用查找表过滤掉结果。

答案 1 :(得分:0)

可以为您呈现的情况编写正则表达式。

为了匹配除单词之外的所有单词,您可以写:

w|wo|wor|word[a-z]+|([^w]|w[^o]|wo[^r]|wor[^d])[a-z]*

但正如@Thomas和@rici指出的那样,你有更好的解决方案(特别是在 你定义了一个具体的问题)。

示例:"计算除 word "之外的所有单词;实际上非常简单(使用托马斯提议):

%%
  int i;

word        {    }
[a-z]+      {i++;}

.|\n        {    }
<<EOF>>     { printf("%d\n",i); return 0; }
%%

(未测试的)