正则表达式 - 获取引号中的字符串忽略转义的引号和评论

Posted

技术标签:

【中文标题】正则表达式 - 获取引号中的字符串忽略转义的引号和评论【英文标题】:Regex - Get strings in Quotes ignore escaped Quotes and Comments 【发布时间】:2017-06-24 08:11:50 【问题描述】:

我的正则表达式需要帮助。我使用 C#。 我需要一个匹配引号内所有字符串的正则表达式,但我需要忽略字符串中的转义引号和注释中的字符串。

// "Hello Guys" -> 忽略字符串

SayHello("你好我\"需要\"我们的帮助"); -> 匹配整个字符串。

我目前使用的正则表达式是这样的:Demo regex

【问题讨论】:

我会分更多的步骤来做。我认为仅使用一个正则表达式可能很难做到 我可能不会绕过。但我对这个正则表达式感到困惑: //.*|/\*(?>[^*]+|\*(?!/))*\*/|(\"(?:\\\"|[ ^\"])*\") 这个正则表达式在 debuggex.com 上工作得很好,但是当我在 csharp 中使用这个时,我得到了奇怪的匹配。 在你匹配的例子中,当你说“匹配整个字符串”时,你的意思也是SayHello函数或者只是Hello i \"need\" our help 【参考方案1】:

如果您在使用字符串进行注释之前准确地知道字符的长度,我们可以使用否定的lookbehind。因为负面的lookbehind不能使用量词。某事like this:

(?<!\/\/.)".*?[^\\]"

或者这样做。使用此正则表达式删除所有使用 // 的评论

\/\/.*

然后使用它来获取所有字符串

".*?[^\\]"

【讨论】:

谢谢,这正是我需要的 :) 非常感谢。【参考方案2】:

排除东西(处理补码)不是正则表达式的优点(不包括一些more or less exotic extensions,而是自动机理论和形式语言精神中的正则表达式)。

// cmets 需要在其自己的传递中被过滤掉或替换为无害的内容。

\" 转义需要类似的处理。

然后你可以用一些正则表达式来匹配解散后的内容。

【讨论】:

以上是关于正则表达式 - 获取引号中的字符串忽略转义的引号和评论的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式在单引号内转义双引号

带有转义引号的引用字符串的正则表达式

使用正则表达式将带引号的字符串与嵌入的非转义引号匹配

正则表达式匹配双引号内的每个字符串并包含转义引号

正则表达式在双引号内转义双引号

具有奇怪行为的正则表达式:将字符串与反向引用匹配以允许转义以及单引号和双引号