【发布时间】:2021-11-15 17:51:23
【问题描述】:
这是我所知道的:
- 括号内的^ 匹配不属于括号内的字符。
- + 匹配表达式左侧的一个或多个外观(在我的 ex. [^0-9] 中)。
- $ 如果我没记错的话,匹配以左边表达式结尾的表达式。
然后看起来这个表达式应该匹配至少有一个不是数字的字符并且以该表达式结尾的输入,例如它应该匹配: 1a, aaa, 2321a,1b1b
并且不应该匹配: 111, 432423,asd3213
但我不清楚运行这条规则它到底匹配什么。
这是我的完整代码:
%option noyywrap
%{
#include<stdio.h>
%}
%%
[^0-9]+$ printf("not a number");
%%
int main()
{
yylex();
return 0;
}
我正在使用 flex。
输出示例(对不起链接,它不会让我上传照片):
[1] https://ibb.co/qp3hB0r - 不匹配但打印回来
[2] https://ibb.co/syZHjrw - 不匹配并吃掉它(如果我没有在代码中添加“.|\n”,为什么会发生这种情况?)
[3] https://ibb.co/s6S0tQh - 匹配并打印回来
[4] https://ibb.co/VmZW7KR - 与第三个相同
[5] https://ibb.co/2vPfWhc - 仅匹配 11(?) 并吃掉了 aa
我对它实际匹配的内容感到非常困惑,希望能得到帮助。
【问题讨论】:
-
"它不会让我上传照片" 看来您正在处理文本。如果可以将文本本身包含在问题中,为什么还要包含文本图片? SO 强烈建议不要使用文字图片。只需将格式化文本复制并粘贴到您的问题中即可。
-
您可能想从阅读 flex 手册中的几页开始:Pattern Syntax 和 How the Input is Matched。第二个特别重要,因为它解释了 flex 扫描器的实际作用(将输入拆分为连续的标记,这与搜索正则表达式不同),以及当没有模式匹配时它会做什么。看完之后,如果还有不明白的地方,请随时提出更准确的问题。
标签: c regex flex-lexer lex lexical-analysis