我有一个.NetStandard2.1
C#
应用程序,需要在ECMAScript
风味中运行Regex
。
根据MSDN文档,我可以使用RegexOptions.ECMAScript
:
为表达式启用符合ecmascript的行为。
我知道ECMAScript
不支持A
锚(根据链接,当我尝试使用ECMAScript选项的Regex101时)。但是。net似乎支持它。例子:
Regex emcaRegex = new Regex(@"Ad{3}", RegexOptions.ECMAScript);
var matches = emcaRegex.Matches("901-333-");
Console.WriteLine($"number of matches: {matches.Count}"); // number of matches: 1
Console.WriteLine($"The match: {matches[0]}"); // The match: 901
我期望得到不匹配,我错过了什么?
您需要在"ECMAScript匹配行为"中进一步查找答案。文章。
这个选项没有重新定义。net特定的锚的含义,它们仍然被支持。
ECMAScript和规范正则表达式的行为在三个方面有所不同:字符类语法、自引用捕获组以及八进制和反向引用解释。
字符类语法。因为规范正则表达式支持Unicode,而ECMAScript不支持,所以ECMAScript中的字符类语法更有限,而且一些字符类语言元素具有不同的含义。例如,ECMAScript不支持语言元素,如Unicode类别或块元素
p
和P
。类似地,匹配单词字符的w
元素在使用ECMAScript时等同于[a-zA-Z_0-9]
字符类,在使用规范行为时等同于[p{Ll}p{Lu}p{Lt}p{Lo}p{Nd}p{Pc}p{Lm}]
。有关更多信息,请参见字符类。自引用捕获组。对自身有反向引用的正则表达式捕获类必须在每次捕获迭代时更新。
解决八进制转义和反向引用之间的歧义。
正则表达式 | 规范行为 | ECMAScript行为 |
---|---|---|
|