- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我看这里ANSI C grammar .
本页包含大量用于 ANSI C 的 Lex/Flex 正则表达式。
在理解字符串文字的正则表达式时遇到问题。
他们提到正则表达式为 \"(\\.|[^\\"])*\"
据我所知,\"
用于双引号,\\
用于转义字符,.
用于任何字符,除了escape character
和 *
为零次或多次。
[^\\"]
表示除 \
、 "
之外的字符。
所以,在我看来,正则表达式应该是\"(\\.)*\"
。
你能给出一些上面的正则表达式会失败的字符串吗?
或
为什么他们使用了[^\\"]
?
最佳答案
正则表达式 \"(\\.)*\"
您建议的匹配字符串由 \
组成符号与任何字符交替出现,例如:
"\z\x\p\r"
因此,此正则表达式无法匹配如下字符串:
"hello"
字符串 "hello"
将由正则表达式 \".*\"
匹配但这也将匹配字符串 """"
或 "\"
两者均无效。
为了摆脱这些无效匹配,我们可以使用 \"[^\\"]*\"
, 但这现在无法匹配像 "\a\a\a"
这样的字符串这是一个有效的字符串。
正如我们所见\"(\\.)*\"
确实匹配这个字符串,所以我们需要做的就是将这两个组合起来得到 \"(\\.|[^\\"])*\"
.
关于c++ - 莱克斯/柔性 :Regular expression for string literals in C/C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28247979/
我有一个源代码,我想添加行号。 我做了什么: %{ int lines=0; %} LINE \n %% {LINE} {ECHO;printf("%d", ++lines);} 但是,我不知
所以我的问题很简单,在我的词法分析器类(扩展 lex::lexer )中,我有以下内容; this->self.add ... ("&&", AND_AND) ("||", O
抱歉,如果这是一个新手问题,但我需要知道哪个 token 定义产生了某个 token 。当我打印 token ID 时,我只得到一个整数。我需要知道哪个正则表达式生成了这个标记。 编辑: 这是我定义标
我看这里ANSI C grammar . 本页包含大量用于 ANSI C 的 Lex/Flex 正则表达式。 在理解字符串文字的正则表达式时遇到问题。 他们提到正则表达式为 \"(\\.|[^\\"]
到目前为止,我已经阅读了很多关于 (F)Lex 的内容,但我找不到答案。其实我有 2 个问题,得到一个答案就足够了。 我有这样的字符串: TOTO 123 CD123 RGF 32/FDS HGGH
我正尝试在 lex 和 yacc 中为新语言名称 CSimple 构建我的编译。(这是该语言的手册:http://www.cs.ucsb.edu/~chris/teaching/cs160/proje
我是一名优秀的程序员,十分优秀!