正则表达式逃脱。解释和示例

时间:2015-02-16 14:43:25

标签: c# regex escaping

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

由于

3 个答案:

答案 0 :(得分:1)

documentation中所述:

  

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

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

例如,要使用正则表达式威胁,+作为字符+,而不是以前的运算符中的一个或多个,我们就像这样逃避它:\+。这告诉解析引擎按原样处理+

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

Regex.Escape("("+"(.*?))")

输入中的任何元字符基本上都会在其前面加上反斜杠。所以:

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

但是,当然,任何显示字符串的东西就像它在C#源代码中一样(如VS调试器工具窗口)本身会逃避反斜杠,因此显示如下:

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

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

PS。不要编写自己的Regex.Escape:你只会错过语法的一些边缘情况(并且有很多)。可以使用Framework方法,因此请使用它。