%{
int capital_count = 0;
%}
%%
[A-Z]+[^a-z][ \t\n] { capital_count++; }
. ; // Ignore other characters
%%
int main() {
yylex();
printf("Number of capital words: %d\n", capital_count);
return 0;
}
这是我的代码,用于检测全部大写字母的单词,但是当单词是“tODAY”,“ToDAY”,“TOdAY”等类型时,此代码将是错误的。
如何编写检测全大写字母的单词的正则表达式
大写单词的正则表达式就是
[A-Z]+
。
问题是它也会匹配不完全大写的单词部分。 为了防止 lex 中出现此类情况,您制定了第二条规则来捕获所有单词
[A-Za-z]+
。
(它需要在大写规则之后。)
Lex 总是尝试找到最长的匹配,如果它一次适合多个规则,它会选择最早的一个,因此只有当较长的单词无法通过使用小写字符来匹配时,它才会匹配第一个规则。