我是否需要在.NET Regex模式中转义匹配替换?

时间:2012-04-26 00:40:10

标签: c# .net regex

我正在将一些代码从Perl转换为.NET。我有这个///模式替换:

$text =~ s/<A HREF="([^"]+)">\Q\1\E</A>"/$1/gi;

我使用Perl \ Q和\ E来转义我在第一次捕获中匹配的文本,即HREF属性的URL部分。

我如何在.NET中做同样的事情?我已经阅读过使用Regex.Escape()来转义正则表达式的文本,但是如何在执行匹配的正则表达式中使用它? (或者我甚至需要这样做?)

所以现在我没有做任何特别的事情,并想知道这是否会继续像我的Perl正则表达式一样有效:

text = Regex.Replace(text, @"<A HREF=""([^""]+)"">\1</A>", "$1", RegexOptions.IgnoreCase);

1 个答案:

答案 0 :(得分:2)

你不需要Perl中的\ Q ... \ E.事实上,它会让你的Perl无法正常工作,因为这意味着'\ 1'字面意思而不是被第一场比赛的内容所取代。

\ Q ... \ E用于引用正则表达式中特有的字符。用反向引用替换的字符串已经按字面意思采用,而不是作为正则表达式语法重新评估。

插入替换字符串的任何内容都是如此。你只需要\ Q ... \ E或Regex.Escape(),如果你有一个来自regex-land之外的变量,你想要将插入正则表达式的文本,而不是偶然的将其中的一部分视为正则表达元字符。

相关问题