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

时间:2015-07-01 14:20:03

标签: c# .net regex unicode escaping

我们假设我们有以下字符串:

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

我正在使用正则表达式:

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

然而,这个正则表达式似乎没有返回任何匹配:

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

Regex.Matches(str, @"\\+[^""][a-zA-Z0-9]*");
你会得到2场比赛。逐字字符串文字中的\\将与文字\匹配,而+将被视为量词。

实际上,您甚至不需要+(因为它匹配\\\\)和[^""](除非"之后可能有\@"\\[a-zA-Z0-9]+" 这不是你想要匹配的东西,你可以使用

\\

匹配您的子字符串(\[a-zA-Z0-9]+匹配,document.querySelector("#trigger").addEventListener("click", function(e){ if (e.ctrlKey) document.querySelector("#triggerScaleOut").beginElement(); else document.querySelector("#triggerScaleIn").beginElement(); }, false);将匹配该范围内的1个或多个字符。

enter image description here