当前位置: 首页 > 编程语言 > C#

正则表达式解析C#源码查找所有字符串分享

时间:2023-04-10 15:03:47 C#

正则表达式解析C#源码查找所有字符串很久以前就问过这个问题,我希望我已经阅读了如何不使用正则表达式的答案在C#(或Java、C++等)中!我希望使用Regex(正则表达式)获取C#源代码中所有字符串的列表,包括嵌入双引号的字符串。这应该不难,但在我花时间尝试构建正则表达式之前,有人已经有了“预制”的吗?这不像我第一次发布这个作为我的答案那么容易,所以它在阅读这个问题的其他人中脱颖而出。正如我在对该问题的有用评论中指出的那样,很明显正则表达式不是在C#代码中查找字符串的好工具。当我提醒自己正则表达式语法时,我本可以编写一个简单的“解析器”。-(解析器是夸大其词,因为注释等中没有",这是我正在处理的源代码。)这似乎很好地总结了这一点:有些人遇到问题并认为“我知道,我将使用正则表达式模式。“现在他们有两个问题。但是,在我的代码崩溃之前,我会使用Blixt发布的正则表达式,但如果它给我带来问题,我不会花比赛时间尝试修复它,然后编写我自己的解析器。例如,它是一个C#字符串@"@Q(?:[^Q]+|QQ)*Q|Q(?:[^Q\]+|\.)*Q".Replace('Q','"')UPDATE,上面的正则表达式有问题,所以我只写了自己的解析器,包括编写单元测试花了大约2个小时来编写解析器。这比我尝试在线查找(和测试)预制正则表达式所花费的时间要少得多。我看到的问题是我倾向于避免使用regex而只是自己编写字符串处理代码,然后很多人声称我不使用regex是在浪费客户的钱。然而,每次我尝试使用正则表达式时,看似简单的匹配模式都会变得更快。(我读过没有关于在.net中使用Regex的在线文章,有一个很好的说明明确说明何时不使用regex。也可以使用它的MSDN文档)让我们看看是否可以帮助解决这个问题,我刚刚创建了一个堆栈溢出问题“何时不使用正则表达式”查找C风格字符串的正则表达式是:“(?:[^”\]+|\.)*"这不会考虑评论,所以最好的方法是先删除所有评论,使用以下正则表达式:/*(?s:(?!*/).)**/|//.*请注意,如果将上述正则表达式放在字符串中,则需要将所有反斜杠加倍并转义任何引号。更新:更改了注释中的正则表达式,以便将DOTALL标志用于多行注释。此外,你可能想要支持文字字符串,所以使用它而不是其他字符串正则表达式:@"(?:[^"]+|"")*"|"(?:[^"\]+|\.)*"并提醒一句:不要将DOTALL用作任何这些正则表达式的全局标志,因为它会破坏单行注释和单行字符串(普通字符串是单行,而文字字符串可以跨越多行。)viawww.regular-expressions.info:"[^"\rn]*(?:\.[^"\rn]*)*"匹配单行字符串,如果引号字符可以出现在该字符串中被转义反斜杠。虽然这个正则表达式可能看起来比它需要的更复杂,但它比简单的解决方案要快得多,如果双引号出现在某处而不是字符串的一部分,它会导致大量回溯。"[^"\]*(?:\.[^"\]*)*"允许字符串跨越多行。我使用的是C#解析器中使用的5分表达式:普通字符串:"((")|[^"]|)"Verbatimstring:@("[^"]*")+以上为C#学习教程:正则表达式解析C#源码,找出所有字符串共有的内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注,本文采集自转载于互联网,不代表立场,如涉及侵权,请点击维权联系管理员删除。如需转载,请注明出处: