C# 我需要在.NET正则表达式模式中避免匹配替换吗?

C# 我需要在.NET正则表达式模式中避免匹配替换吗?,c#,.net,regex,C#,.net,Regex,我正在将一些代码从Perl转换成.NET。我有一个s///模式替换: $text =~ s/<A HREF="([^"]+)">\Q\1\E</A>"/$1/gi; $text=~s/“/$1/gi; 我使用Perl\Q和\E来转义我在第一次捕获中匹配的文本,即HREF属性的URL部分 如何在.NET中执行相同的操作?我已经读过关于使用Regex.Escape()对正则表达式的文本进行转义的内容,但是如何在执行匹配的正则表达式中使用它?(或者我甚至需要这样做?) 所以

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

$text =~ s/<A HREF="([^"]+)">\Q\1\E</A>"/$1/gi;
$text=~s/“/$1/gi;
我使用Perl\Q和\E来转义我在第一次捕获中匹配的文本,即HREF属性的URL部分

如何在.NET中执行相同的操作?我已经读过关于使用Regex.Escape()对正则表达式的文本进行转义的内容,但是如何在执行匹配的正则表达式中使用它?(或者我甚至需要这样做?)

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

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

您不需要Perl中的\Q…。\E。事实上,它会阻止您的Perl工作,因为它意味着“\1”是按字面意思取的,而不是用第一个匹配的内容替换

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


插入到替换字符串中的任何内容也是如此。您只需要\Q…\E或Regex.Escape(),如果您有一个来自regex land外部的变量,其中包含要插入到正则表达式中的文本,而不会意外地将其中的一部分视为正则表达式元字符。

我使用这个Perl正则表达式已经7-8年了,它一直工作得很好。我想知道新版本的Perl是否不再使用了在这种情况下需要\Q转义吗?但是在编写脚本时,如果URL包含任何特殊字符(例如查询字符串中的?),则表达式在没有\Q和\E的情况下将不匹配…我将标记您的答案,谢谢。包括特殊字符在内的简单演示:
“?”=~/(。\1/
返回
(?)
“;
”??“=~/()\Q\1\E/
返回
()
。伙计,我很想知道这个行为何时改变。我发誓这个(非常旧的)脚本已经运行了很长时间,尽管我最近没有重新评估它…感谢更新!