Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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正则表达式类时,如何将正则表达式视为纯文本?_C#_.net_Regex_String - Fatal编程技术网

C# 在使用.Net正则表达式类时,如何将正则表达式视为纯文本?

C# 在使用.Net正则表达式类时,如何将正则表达式视为纯文本?,c#,.net,regex,string,C#,.net,Regex,String,如何使用内置的.NET机制或类似的机制自动转义所有正则表达式字符 我正在使用Regex类查找正则表达式的匹配项。见下面的例子 string pattern = "abc"; Regex regexp = new Regex(@"a\w", RegexOptions.None); if (regexp.IsMatch(pattern)) { MessageBox.Show("Found"); } 所以,这里找到了会击中的 现在,在某些情况下,我仍然希望使用正则表达式类,但将正则表达式视为

如何使用内置的.NET机制或类似的机制自动转义所有正则表达式字符

我正在使用Regex类查找正则表达式的匹配项。见下面的例子

string pattern = "abc";
Regex regexp = new Regex(@"a\w", RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}
所以,这里找到了会击中的

现在,在某些情况下,我仍然希望使用正则表达式类,但将正则表达式视为普通字符串。例如,我将模式字符串更改为@“a\w”,并且需要正则表达式类找到匹配项

string pattern = @"a\w";
Regex regexp = new Regex(@"a\w", RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}
在上述情况下,“find”也应该命中。 所以,问题是如何将正则表达式转换或视为普通字符串或类似可在正则表达式类中使用的字符串?如何实现上述代码片段场景


注意:-我不想使用string.Contains、string.IndexOf等进行纯文本字符串匹配。

您只需转义特殊字符,如:
@“a\\w”
您只需转义特殊字符,如:
@“a\\w”
在第二种情况下,您不想搜索regex中的
\w
含义,您希望搜索文本
\w
,因此您希望:

string pattern = @"a\w";
Regex regexp = new Regex(@"a\\w", RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}

(注意转义)

在第二种情况下,您不想搜索正则表达式中
\w
的含义,您想搜索文本
\w
,因此您需要:

string pattern = @"a\w";
Regex regexp = new Regex(@"a\\w", RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}
(注意转义)

您可以通过“去正则化”字符串。这将把要搜索的模式转换为正确转义的正则表达式版本

string pattern = @"a\w";
Regex regexp = new Regex(Regex.Escape(@"a\w"), RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}
你可以“去正则化”你的字符串。这将把要搜索的模式转换为正确转义的正则表达式版本

string pattern = @"a\w";
Regex regexp = new Regex(Regex.Escape(@"a\w"), RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}

三刀?你想你是说两三刀?你的意思是说实际上,@“a\w”或@“a\\w”将是用户从UI文本框中输入的内容。因此,修改输入模式是内部代码实现的责任。用户可以选择匹配为正则表达式或文本(普通)。在这种情况下,必须在非正则表达式文本中修改模式字符串。我不知道有什么内置机制,不过如果有人知道的话,我很感兴趣。您必须手动转义所有正则表达式字符,即将
[
替换为
\[
替换为
\(
替换为
\。
等。请参见下面Hans的答案。您可以“反正则表达式”你的字符串通过Regex.Escape。这将把你要搜索的模式转换为正确转义的Regex版本。Woo,我不知道!真棒:DActually,@“a\w”或@“a\\w”将是来自UI文本框的用户输入。因此,修改输入模式是内部代码实现的责任。用户可以选择将匹配项选择为正则表达式或文本(普通)。在这种情况下,必须在非正则表达式文本中修改模式字符串。是否有任何方法可以通过编程实现。我不知道任何内置机制,但如果其他人知道,我会感兴趣。您必须手动转义所有正则表达式字符,即将
[
替换为
\[
\(
\。
等。请参见下面Hans的答案。您可以“去正则表达式”你的字符串通过Regex.Escape。这会将你要搜索的模式转换为正确转义的Regex版本。Woo,我不知道!真棒:如何使用内置的.NET机制或类似的东西自动转义所有Regex字符?这就是该方法的用途。它会将输入字符串转换为匹配文字输入。非常感谢!这就是我要找的。如何使用内置的.NET机制或类似的方法自动转义所有正则表达式字符?这就是该方法的用途。它将输入字符串转换为与文字输入匹配的正则表达式字符串。非常感谢!这就是我要找的。