1

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

$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);
4

1 回答 1

2

您不需要 Perl 中的 \Q...\E。事实上,它会阻止你的 Perl 工作,因为这意味着 '\1' 是按字面意思使用的,而不是被第一个匹配项的内容替换。

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

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

于 2012-04-26T01:08:27.690 回答