【问题标题】:Regex For Strings in CC中字符串的正则表达式
【发布时间】:2017-09-20 02:02:50
【问题描述】:

我希望为 C 中的一些字符串创建一个正则表达式。

这是我目前所拥有的:

C 中的字符串由双引号 (") 分隔,因此正则表达式必须用 \" \" 括起来。

字符串可能不包含换行符,所以我需要做 [^\n] (我认为)。

当且仅当它们被转义时,字符串也可能包含双引号或反斜杠字符。因此 [\\ \"] (我再次认为)。

除此之外什么都没有。

非常感谢任何帮助我有点迷失如何开始编写这个正则表达式。

【问题讨论】:

  • 您是否尝试匹配所有没有换行符的字符串,这些字符串可能已经或可能没有转义反斜杠和转义双引号?
  • 是的,这是正确的@N Brown
  • @Ken Y-N 发帖提出了类似的问题,但没有一个答案能完成问题,因为它仍然允许换行符。
  • This answer 明确表示它适用于单行。

标签: regex flex-lexer


【解决方案1】:

一种识别字符串文字的简单弹性模式(包括带有嵌入行继续的文字):

["]([^"\\\n]|\\.|\\\n)*["]

这将允许

   "string with \
line continuation"

但不是

"C doesn't support
 multiline strings"

如果您不想处理续行,请删除 \\\n 替代项。如果你需要三字母支持,那就更烦人了。

虽然识别字符串,但它并没有尝试理解它们。通常,C 词法分析器会希望处理带有反斜杠序列的字符串,以便将 "\"\n" 转换为两个字符 "NL (0x22 0x0A)。您可能,在某些时候,想看看,例如,Optimizing flex string literal parsing(尽管如果您使用 C 编程,则需要对其进行调整)。

Flex 模式记录在 flex manual 中。也可能值得阅读有关正则表达式的良好参考,例如 John Levine 关于Flex and Bison 的优秀书籍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多