繁体   English   中英

Regex.Escape()无法识别的异常

[英]Regex.Escape() unrecognized exception

我在C#有以下代码:

String str = @"\hello ali how are you? are you fine? hello and hi";
Console.WriteLine(Regex.Matches(Regex.Escape(str), @"\hello").Count);

我收到以下错误:

{“parsing \\”\\ hello \\“ - 无法识别的转义序列\\ h。”}

我需要知道我的代码中何时存在\\ + (some names) 我使用@来不使用转义序列字符,但我仍然得到提到的错误。 我不明白为什么会这样!

\\用于表示正则表达式中的速记类。 例如\\d表示“任何数字”,或\\w表示“任何单词字符(字母数字字符加下划线)”。 正则表达式引擎认为你试图使用\\h作为这些速记序列之一,但它不是有效的。

要匹配正则表达式中的文字\\ ,您需要使用另一个文本\\来转义它,例如\\\\ 所以在你的例子中你的正则表达式是\\\\hello

有关更多详细信息,请参见http://www.regular-expressions.info/characters.html

转义序列在字符串具有不同含义的正则表达式中独立使用。 当您使用@为字符串文字添加前缀时,您告诉编译器在没有转义序列的情况下按字面解释字符串。 然而,正则表达式引擎再次看到“\\ h”并尝试将其解释为转义序列。

基本上你需要应用两个字符串字面@ Regex.Escape功能,使\\h双方解析器解释为文字:

Console.WriteLine(Regex.Matches(str, Regex.Escape(@"\hello")).Count);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM