【问题标题】:Regex Escaping. Explanation and Example正则表达式转义。说明和示例
【发布时间】:2015-02-16 14:43:25
【问题描述】:

我想简单解释一下 C# 中正则表达式的转义结构。我已经阅读了 MSDN 页面,但似乎我无法编写有效的 Regex.Escape() 此外,转义“(”,“)”和“。”的工作示例人物会很棒。例如somestring = Regex.Escape("("+"(.*?))");

谢谢

【问题讨论】:

    标签: c# regex escaping


    【解决方案1】:

    documentation中所述:

    转义一组最小字符(,\, *, +, ?, |, {, [, (,), #, ^, $, ., 和空格)通过用它们的转义码替换它们。这指示正则表达式引擎解释这些字符 字面意思而不是元字符。

    这基本上意味着,在正则表达式语言中,您有一些特殊字符。这些字符包括?*.+等运算符。

    例如,有一个正则表达式威胁,+ 作为字符 +,而不是 一个或多个先前的操作符,我们像这样转义它:\+ .这告诉解析引擎按原样处理+

    转义方法的作用是为这些字符添加额外的反斜杠。

    因此,鉴于此:Regex.Escape("("+"(.*?))");,输出字符串将为\(\(\.\*\?\)\),这意味着匹配给定字符串:(.*?))

    【讨论】:

    • 感谢您的解释。您能否也提供一个转义 (, ) 和 .在一个字符串中。例如 string 's = "Some (text)." '
    • @user3640195:这应该在我的回答的最后部分涵盖。
    • so 's = Regex.Escape(@"()\.");'会给我一个字符串's = Some text'?还是我必须遵循某种模式?
    • Regex.Escape(@"()\.") will yield: \(\)\\\.. (` 和 \) 因为你分别转义 ()。然后你得到 \\ 因为你需要转义 ` and finally, you get \.` 因为你需要逃离.
    【解决方案2】:

    在您尝试使用该变量的值作为正则表达式来搜索特定子字符串的变量中,可能存在一些正则表达式元字符的可能性。在这种情况下,我们需要将变量放在Regex.Escape 函数中,以使变量中存在的特殊字符自动转义。

    【讨论】:

      【解决方案3】:
      Regex.Escape("("+"(.*?))")
      

      基本上输入中的任何元字符前面都有一个反斜杠。所以:

      \(\(\.\*\?\)\)
      

      当然,任何显示字符串就好像它在 C# 源代码中的内容(如 VS 调试器工具窗口)本身会转义反斜杠,因此显示如下:

      \\(\\(\\.\\*\\?\\)\\)
      

      (因此为什么 verbastin 字符串对正则表达式如此有用。)

      PS。不要自己写Regex.Escape:你只会错过一些语法的边缘情况(而且有很多)。框架方法是可以使用的,所以使用它。

      【讨论】:

      • 感谢您的回答。经过一些测试,我意识到 Regex.Escape 会自动转义给定字符串中的特殊字符。
      猜你喜欢
      • 2019-11-30
      • 2012-07-21
      • 2013-01-18
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多