正则表达式

dongfengkuayue 2014-10-19 04:29:27
用lex写一个词法分析器,但是搞不清正则表达式里 \\\0 ,\\0,\0的区别,很头疼
...全文
137 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cody2k3 2014-10-20
  • 打赏
  • 举报
回复
简单来说, lex的正则表达式并没有特别的语义 \0 表示转义0, 所以这个对应char hex 00 \\ 表示转义 \, 所以这个对应单个char backslash '\', hex 5c 所以 \\0 = \\ + 0, 对应一个转义的\ + 一个ascii 0 (hex 0x30) = hex 0x 5c 30 同理 \\\0 = \\ + \0 对应一个转义的\ + 一个转义的0 = hex 0x 5c 00 以此类推,给楼主一个可以运行的例子 $cat d %% ^0$ printf("0 found at line %d, len=%d\n", yylineno, yyleng); ^\0$ printf("\\0 found at line %d, len=%d\n", yylineno, yyleng); ^\\0$ printf("\\\\0 found at line %d, len=%d\n", yylineno,yyleng); ^\\\0$ printf("\\\\\\0 found at line %d, len=%d\n", yylineno, yyleng); ^\\\\0$ printf("\\\\\\\\0 found at line %d, len=%d\n", yylineno, yyleng); \n ++yylineno;ECHO; %% vim里面看到的input file内容,^@ 表示hex 00 1 start line 2 0 3 ^@ 4 \0 5 \^@ 6 \\0 7 \\^@ 8 \\\0 9 end line od的显示 $od -ta input 0000000 s t a r t sp l i n e nl 0 nl nul nl \ 0000020 0 nl \ nul nl \ \ 0 nl \ \ nul nl \ \ \ 0000040 0 nl e n d sp l i n e nl 0000053 运行的结果 $./test < input start line 0 found at line 2, len=1 \0 found at line 3, len=1 \\0 found at line 4, len=2 \\\0 found at line 5, len=2 \\\\0 found at line 6, len=3 \\ \\\0 end line

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧