正则表达式 - 获取引号中的字符串忽略转义的引号和评论
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 需要在其自己的传递中被过滤掉或替换为无害的内容。
\" 转义需要类似的处理。
然后你可以用一些正则表达式来匹配解散后的内容。
【讨论】:
以上是关于正则表达式 - 获取引号中的字符串忽略转义的引号和评论的主要内容,如果未能解决你的问题,请参考以下文章