【发布时间】:2009-06-08 16:08:00
【问题描述】:
我很久以前就问过这个问题, 我希望我已经阅读了答案 When not to use Regex in C# (or Java, C++ etc) 第一!
我希望使用 Regex(正则表达式)来获取我的 C# 源代码中所有字符串的列表,包括其中嵌入了双引号的字符串。
这应该不难,但是在我花时间尝试构建正则表达式之前,有没有人已经有了“预装”的?
这并不像最初看起来那么容易,因为
- “av\”d”
- @”ab””cd”
- @”ab”””
- @”””ab”
- 等
【问题讨论】:
-
您可能会发现这比您预期的要多一些(取决于您的需要)。例如:注释代码呢?如果要忽略 cmets 中的字符串,则必须注意“//”和“/*..*/”块(除非注释分隔符本身位于字符串文字中)等。
-
还有多行 @-strings 没有“答案”句柄。正则表达式无法处理这个问题,你必须使用解析器。
-
正如 jwz 的名言,“现在你有两个问题”。 -- regex.info/blog/2006-09-15/247 -- 一开始我不会使用正则表达式来解决这个问题;我会写一个分词器。
-
叹息。不要尝试使用正则表达式来解析非常规语言。您展示的示例只是会妨碍您的一些事情。一般来说,编程语言是“嵌套的”或“凹凸不平的”,通过使用正则表达式,您尝试将它们视为“扁平”。打个比方,你可以尝试绕过颠簸,但不清楚这样的算法是否真的总能达到目标。
-
因此,“这应该不难”显然是错误的。使用普通的或“真正的”正则表达式,这是无法做到的。现代“正则表达式”引擎具有扩展部分非常规域,但它们的使用并非微不足道。所以,“这应该是非常困难的”,确实。