忽略正则表达式转义序列C#

时间:2012-12-02 22:21:11

标签: c# regex string

我无法告诉Regex忽略任何转义序列。

以下是一些示例代码:

string input = "?";
foreach (Match m in Regex.Matches(input, "?"))
      {
         ...
      }

但是当它被执行时,它会抛出以下错误: 解析“?” - 量词{x,y}无效。

我只想要“?”作为一个字符串处理。

感谢。

编辑: 我也尝试过:

foreach (Match m in Regex.Matches(input, "\?"))
                {
...
                }

告诉我,这不是一个有效的转义序列。

我也试过了:

foreach (Match m in Regex.Matches(input, "\x3f"))
                {
...
                }

4 个答案:

答案 0 :(得分:11)

.NET提供了一个自动为您进行任何转义的函数。每当你有某种输入字符串,你想要匹配字面(只是那里的字符),但你知道你使用正则表达式搜索,然后通过这种方法运行它们:

string pattern = Regex.Escape(literalString);

这将处理可能是正则表达式的元字符的任何字符。

MSDN on Escape

答案 1 :(得分:2)

您需要转义正则表达式引擎的?,因为?在正则表达式中具有特定含义作为量词:

\?

您还需要使用verbatim string literals,因此\作为C#字符串转义序列没有特殊含义 - 这两者是等效的 - @"\?""\\?"

所以:

string input = "?";
foreach (Match m in Regex.Matches(input, @"\?"))
{
     ...
}

通常,反斜杠\是正则表达式中的转义序列

答案 2 :(得分:1)

你需要逃脱吗?如 \\?

在正则表达式中,而不是在文本中。

查看这篇文章:

http://www.codeproject.com/Articles/371232/Escaping-in-Csharp-characters-strings-string-forma

答案 3 :(得分:0)

使用内置的Escape方法。

Regex.Escape("/")

另见MSDN RegEx.Escape()