识别转义字符问题的正则表达式

Regex to identify escaped characters issue

假设我们有以下字符串:

@"Hello m\u00e9 name is Mat\u00bfQu"

我正在使用正则表达式:

private static readonly Regex ESCAPING_REGEX = new Regex("\+[^\"][a-zA-Z0-9]*", RegexOptions.Compiled);

但是,这个正则表达式似乎 return 没有任何匹配项:

MatchCollection matches = ESCAPING_REGEX.Matches(text);
// matches.Count == 0

我在 Regex101 上尝试了正则表达式,它确实 return 我正在寻找的两个匹配项。

如何修复我的正则表达式以实现预期的行为? (很高兴接受任何改进建议。)

您的正则表达式声明有误,因为您需要文字 + 位于匹配项的开头。看看你的正则表达式对于正则表达式引擎来说是什么样的:

  • \+ - 匹配文字 +
  • [^"] - 匹配 "
  • 以外的任何字符
  • [a-zA-Z0-9]* - 匹配 0 个或多个数字或拉丁字母字符。

如果您使用逐字字符串文字来创建正则表达式,例如

Regex.Matches(str, @"\+[^""][a-zA-Z0-9]*");

你会得到 2 场比赛。逐字字符串文字中的 \ 将匹配文字 \,而 + 将被视为量词。

实际上,您甚至不需要 +(因为它会匹配 \\)和 [^""](除非 " 紧跟在 \ 而这不是你想要匹配的),你可以使用

@"\[a-zA-Z0-9]+"

匹配您的子字符串(\ 匹配 \[a-zA-Z0-9]+ 将匹配范围内的 1 个或多个字符)。