【发布时间】:2016-03-04 07:35:41
【问题描述】:
我有用户输入的字符串,并希望对它们进行标记。为此,我想使用正则表达式,但现在遇到了一个特殊情况的问题。 一个示例字符串是
Test + "Hello" + "Good\"more" + "Escape\"This\"Test"
或 C# 等价物
@"Test + ""Hello"" + ""Good\""more"" + ""Escape\""This\""Test"""
我可以匹配 Test 和 + 标记,但不能匹配 "。我使用 " 让用户指定这实际上是一个字符串而不是特殊标记。现在如果用户想在字符串中使用 " 字符,我想允许他用 \ 转义它。
所以规则是:给我两个“”之间的所有内容,但最后一个“”前面的字符不能是\。
我期望的结果是:"Hello""Good\"more""Escape\"This\"Test"
我需要 " " 字符出现在最后一场比赛中,所以我知道这是一个字符串。
我目前有正则表达式@"""([\w]*)(?<!\\"")""",它给了我以下结果:"Hello""more""Test"
所以后面的样子并没有像我想要的那样工作。有谁知道获取我想要的字符串的正确方法吗?
【问题讨论】:
-
还有下一层:\ 通常可以用另一个 \\... 转义...所以
\\"vs\" -
Xanatos 是对的,否则,
"[^"\\]*(?:\\.[^"\\]*)*"应该适合你 (C#var rx = "\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"")。