我们假设我们有以下字符串:
@"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上尝试了正则表达式,它确实返回了我正在寻找的两个匹配项。
如何修复正则表达式以实现预期的行为? (很高兴接受任何改进提示。)
答案 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个或多个字符。