C# Regex.Escape的目的是什么?
我有一个如下的代码,其中'QualifiedInstanceFilter'是合格实例过滤器的访问器。谁能告诉我行m_afc.QualifiedInstanceFilter=“^(“+Regex.Escape(this.Identifier)+”)中发生了什么逻辑; 这是完整的代码C# Regex.Escape的目的是什么?,c#,visual-studio,C#,Visual Studio,我有一个如下的代码,其中'QualifiedInstanceFilter'是合格实例过滤器的访问器。谁能告诉我行m_afc.QualifiedInstanceFilter=“^(“+Regex.Escape(this.Identifier)+”)中发生了什么逻辑; 这是完整的代码 public override string Identifier { get { return string.Format("{0}{1}{2}{3}{4}",
public override string Identifier
{
get
{
return string.Format("{0}{1}{2}{3}{4}",
Owner.Class,
IDSeparator,
ManagedClass.Name, IDClassNameSeparator, Instance);
private AlertFilter m_afc = new AlertFilter("", "", true, "", "", "");
m_afc.QualifiedInstanceFilter = "^(" + Regex.Escape(this.Identifier) + ")$";
从
转义字符集的最小值(\,*,+,?,|,{,[,(,),^,$,。
,
#
和空格),将它们替换为转义码。这
指示正则表达式引擎解释这些字符
从字面上而不是元字符
在您的代码中,它设置了一个连接字符串,该字符串等于
m\u afc.QualifiedInstanceFilter
和“转义”此.Identifier中的任何内容。如果有任何特殊字符,则使用\
将其作为非元字符处理。Regex.Escape
用于“转义”吗可能包含在正则表达式中具有特殊含义的字符的字符串。例如(一个简单的示例):
假设我想根据用户输入搜索字符串。可以假设我可以编写一个正则表达式,如“*”+UserInput+“*”
。问题是,如果用户搜索“$money”?“$
在正则表达式中有特殊含义,因此产生了这个正则表达式:*$money.
”-这是不正确的
如果在此之前使用了Regex.Escape
,则$
字符将被转义以避免该行为
您可以从中了解更多信息。共同构成
标识符的字符串是任意字符串-它们可能包括[
]
*
\
以及正则表达式中具有特殊含义的所有其他字符。然而,限定的stancefilter
的预期效果是字面上匹配标识符
,因此
m_afc.QualifiedInstanceFilter = "^(" + this.Identifier + ")$";
我们可能会得到一个值,比如^(()$(${p${}$*${$}{$}{$$)$
,这会使正则表达式引擎非常混乱。因此,我们使用regex.Escape
来表示:“我想在正则表达式中使用这个字符串,但我希望正则表达式中通常特殊的字符没有特殊含义”。然后,正则表达式引擎将转义特殊字符(通过在\
前面加上前缀),这样,当我们通过concationation创建常规表达式时,其中唯一的正则表达式特殊字符就是我们放在那里的字符-首字母^(
和最后的)$
,这比其他答案简单一些:
如果要匹配正则表达式中的特殊字符,例如句点“”,您会怎么做?在它前面加一个反斜杠,即转义它
Regex.Escape
对您传递的任何字符串执行此操作,因此它可以转义您在编译时不知道的内容。一个示例是在Regex中包含用户指定的字符串,这些字符串可能包含特殊字符。您试过查看MSDN吗?