【问题标题】:Ignore Regex escape sequences C#忽略正则表达式转义序列 C#
【发布时间】:2012-12-02 22:21:10
【问题描述】:

我无法告诉 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"))
                {
...
                }

【问题讨论】:

    标签: c# regex string


    【解决方案1】:

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

    string pattern = Regex.Escape(literalString);
    

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

    MSDN on Escape

    【讨论】:

      【解决方案2】:

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

      \?
      

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

      所以:

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

      一般来说,反斜杠\是正则表达式中的转义序列。

      【讨论】:

      • 我试过了,但它不被识别为转义序列。我也试过替换“?”用 "\x3f" 无济于事。那么其他字符串呢,比如:“+”?
      • @user1869353 - 是的,您需要记住您正在使用 两种 语言 - 有 C# 字符串转义和正则表达式转义。
      • 使用两个斜线而不是一个
      【解决方案3】:

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

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

      查看这篇文章:

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

      【讨论】:

        【解决方案4】:

        使用内置的 Escape 方法。

        Regex.Escape("/")
        

        另见MSDN RegEx.Escape()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-20
          • 1970-01-01
          • 1970-01-01
          • 2016-09-04
          • 1970-01-01
          • 2011-08-07
          相关资源
          最近更新 更多