Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Regex.Escape的目的是什么?_C#_Visual Studio - Fatal编程技术网

C# Regex.Escape的目的是什么?

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}",

我有一个如下的代码,其中'QualifiedInstanceFilter'是合格实例过滤器的访问器。谁能告诉我行m_afc.QualifiedInstanceFilter=“^(“+Regex.Escape(this.Identifier)+”)中发生了什么逻辑; 这是完整的代码

 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吗?