Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# .Net Regex.Escape无法正常工作?_C#_.net_Regex - Fatal编程技术网

C# .Net Regex.Escape无法正常工作?

C# .Net Regex.Escape无法正常工作?,c#,.net,regex,C#,.net,Regex,我正在尝试编写一个正则表达式,它接受一个字符串,并将它们作为一个范围构建到一个表达式中。我使用Regex.Escape(.net3.5)来清理这些字符串,这样就不会留下任何控制字符。但是,转义方法似乎没有按预期工作,并且不会转义关闭}或]字符。它不应该逃离这些吗?下面是我正在做的一个例子: string test = @"sdfz346gv][)(}{><"; string pattern = "[" + Regex.Escape(test) + "]+"; string input

我正在尝试编写一个正则表达式,它接受一个字符串,并将它们作为一个范围构建到一个表达式中。我使用Regex.Escape(.net3.5)来清理这些字符串,这样就不会留下任何控制字符。但是,转义方法似乎没有按预期工作,并且不会转义关闭
}
]
字符。它不应该逃离这些吗?下面是我正在做的一个例子:

string test = @"sdfz346gv][)(}{><";
string pattern = "[" + Regex.Escape(test) + "]+";
string input = "ffff{444}g";

if (Regex.IsMatch(input, pattern))
{
    Console.WriteLine("Matched");
}
else
{
    Console.WriteLine("Not Matched");
}
字符串测试=@“sdfz346gv][)(}{>来自:

通过用转义码替换最小字符集(\、*、+、?、|、{、[、(、)、^、$、#和空格),对其进行转义

虽然转义方法转义直括号([)和大括号({)字符,但它不会转义它们相应的结束字符(]和})。在大多数情况下,不需要转义。如果右括号或大括号前面没有相应的开头字符,则正则表达式引擎会逐字解释

发件人:

通过用转义码替换最小字符集(\、*、+、?、|、{、[、(、)、^、$、#和空格),对其进行转义

虽然转义方法转义直括号([)和大括号({)字符,但它不会转义它们相应的结束字符(]和})。在大多数情况下,不需要转义。如果右括号或大括号前面没有相应的开头字符,则正则表达式引擎会逐字解释



我不希望它转义最后一个
]
字符,我希望它转义倒数第二个字符。否则它会改变表达式的含义。-编辑抱歉,我明白你的意思(问题中的拼写错误,已修复),但问题仍然存在。然后编辑你的问题。你清楚地说“就我而言,它应该是这样的
[sdfz346gv]\[\\)\(\}\{>我们一直在想念对方:)只是一个友好的推荐-Expresso(windows)是一个用于调试正则表达式的令人惊讶的免费工具。帮了我很多忙。我不想让它逃避最后的
]
字符,我希望它转义倒数第二个字符。否则它会改变表达式的含义。-编辑抱歉,我明白你的意思(问题中的拼写错误,已修复),但问题仍然存在。然后编辑你的问题。你清楚地说“就我而言,它应该是这样的”
[sdfz346gv]\[\\)\(\}\{>我们一直在想念对方:)只是一个友好的推荐-Expresso(windows)是一个用于调试正则表达式的神奇免费工具。帮了我大忙。如果是这样的话,那么我认为将转义正则表达式字符串与包含控制字符的正则表达式连接起来并不太合适……这似乎有点违背了转义它们的初衷!@JonM:regex元字符丢失或者更改它们在字符类中的含义。如果您计划将
Regex.Escape()
d字符串放入字符类,则必须“手动”转义
]
-
字符。@JonM:微软认为你不需要逃逸右括号或大括号,这似乎是一个非常奇怪的假设。在大多数情况下,
只是在没有另一组括号或大括号不能解释为文字的情况下。我想如果在创建正则表达式模式之前,只需用
\]
\}
简单地替换
]
\}
。@TimPietzcker是的,我理解,我只是假设转义方法会像转义
]
字符一样转义[
字符。@MattBurland:别忘了破折号!如果是这样,那么我认为将转义的正则表达式字符串与包含控制字符的正则表达式串接起来是不合适的……这似乎有点违背了转义的初衷!@JonM:regex元字符在副字符类。如果您计划将
Regex.Escape()
d字符串放入字符类,则必须“手动”转义
]
-
字符。@JonM:微软认为你不需要逃逸右括号或大括号,这似乎是一个非常奇怪的假设。在大多数情况下,
只是在没有另一组括号或大括号不能解释为文字的情况下。我想如果在创建正则表达式模式之前,只需将
]
}
简单替换为
\]
\}
。@TimPietzcker是的,我理解,我只是假设转义方法将转义
]
字符,就像转义
[
字符一样。@MattBurland:别忘了破折号!