6

我无法告诉 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

4 回答 4

11

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

string pattern = Regex.Escape(literalString);

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

MSDN 上Escape

于 2012-12-02T22:29:52.150 回答
2

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

\?

您还需要使用逐字字符串文字,因此\作为 C# 字符串转义序列没有特殊含义 - 这两个是等价的 -@"\?""\\?".

所以:

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

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

于 2012-12-02T22:22:07.667 回答
1

你需要逃跑吗?作为 \\?

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

看看这篇文章:

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

于 2012-12-02T22:23:56.827 回答
0

使用内置的 Escape 方法。

Regex.Escape("/")

另请参阅MSDN RegEx.Escape()

于 2012-12-02T22:29:01.880 回答