正则表达式转义。解释和例子

Regex Escaping. Explanation and Example

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

谢谢

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

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

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

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

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

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

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

PS。不要自己编写 Regex.Escape:您只会错过语法的一些边缘情况(并且有很多)。 Framework方法是有的,就用吧

documentation 中所述:

Escapes a minimal set of characters (,\, *, +, ?, |, {, [, (,), #, ^, $, ., and white space) by replacing them with their escape codes. This instructs the regular expression engine to interpret these characters literally rather than as metacharacters.

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

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

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

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