gpt4 book ai didi

c++ - 莱克斯/柔性 :Regular expression for string literals in C/C++?

转载 作者:可可西里 更新时间:2023-11-01 18:36:51 27 4
gpt4 key购买 nike

我看这里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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com