使用正则表达式查找 C# 样式的未转义字符串

Posted

技术标签:

【中文标题】使用正则表达式查找 C# 样式的未转义字符串【英文标题】:Finding C#-style unescaped strings using regular expressions 【发布时间】:2011-01-18 17:51:40 【问题描述】:

我正在尝试编写一个正则表达式来查找 C# 风格的非转义字符串,例如

string x = @"hello
world";

我遇到的问题是如何编写一个规则来正确处理字符串中的双引号,就像在这个例子中一样

string x = @"before quote ""junk"" after quote";

这应该很容易吧?

【问题讨论】:

使用哪种语言/正则表达式?您是否在 C# 中编写正则表达式并将其应用于 C#? 【参考方案1】:

试试这个:

@".*?(""|[^"])"([^"]|$)

第一个括号的意思是'如果在结束引号之前有一个“,最好是两个',第二个括号的意思是'在结束引号之后,以太不是引号,或者行尾'。

【讨论】:

【参考方案2】:

正则表达式@\"([^\"]|\"\")*\"(?=[^\"])怎么样

由于贪心匹配,您的正则表达式引擎中可能不需要最后的前瞻子句,尽管它更具体。

【讨论】:

【参考方案3】:

如果我没记错的话,您必须使用 \"" - 双双引号将其散列为 C#,反斜杠将其散列为正则表达式。

【讨论】:

【参考方案4】:

试试这个:

@"[^"]*?(""[^"]*?)*";

它寻找开始字符@",寻找结束字符"; (如果需要,可以省略分号)并且在分号之间可以包含除引号之外的任何字符,或者如果有引号,则它们必须加倍。

【讨论】:

【参考方案5】:
@"(?:""|[^"])*"(?!")

是这项工作的正确正则表达式。它匹配@,一个引号,然后是连续的两个引号或任何非引号字符,重复到下一个引号(不加倍)。

【讨论】:

【参考方案6】:

"^@(""|[^"])*$" 是您想要的正则表达式,首先查找一个 at 符号和一个双引号,然后是一个任意字符序列(双引号除外)或双双引号,最后是一个双引号。

作为 C# 中的字符串文字,您必须将其编写为 string regex = "^@\"(\"\"|[^\"])*\"$";string regex = @"^@""(""""|[^""])*""$";。选择你的毒药。

【讨论】:

以上是关于使用正则表达式查找 C# 样式的未转义字符串的主要内容,如果未能解决你的问题,请参考以下文章

了解下C# 正则表达式

PHP正则表达式的使用

正则表达式总结

PHP 正则表达式

C# 正则表达式转义和替换

正则表达式,re模块