我想写一个匹配任何单词的正则表达式。
我使用[a-zA-Z]*
除了某些字词,例如WORD1
和WORD2
。
所以somethingsomething
匹配,但WORD1
和WORD2
不匹配。是否有可能在flex?
我试过了:
[a-zA-Z]*|[^"WORD1""WORD2]
和[a-zA-Z]*{-}["WORD1""WORD2"]
但不起作用。
(现在我知道他们为什么不工作,但我仍然不知道解决方案。)
答案 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; }
%%
(未测试的)