.net 用于替换的带字符的正则表达式

.net 用于替换的带字符的正则表达式,.net,regex,.net,Regex,我有一个用于替换的.NET正则表达式,我想更新它 string rxp = "(?<link>{link name=\"(?<name>[^\"]*)\" url=\"(?<url>[^\"]*)\"})"; input = Regex.Replace(input, rxp, "<a target=\"_blank\" href=\"$3\">$2</a>", RegexOptions.IgnoreCase); string rxp=

我有一个用于替换的.NET正则表达式,我想更新它

string rxp = "(?<link>{link name=\"(?<name>[^\"]*)\" url=\"(?<url>[^\"]*)\"})";
input = Regex.Replace(input, rxp, "<a target=\"_blank\" href=\"$3\">$2</a>", RegexOptions.IgnoreCase);
string rxp=“(?{link name=\”(?[^\“]*)\“url=\”(?[^\“]*)\“})”;
input=Regex.Replace(input,rxp,“,RegexOptions.IgnoreCase);
此正则表达式将成功捕获
{link name=“link 2”url=”http://www.google.com“}
并将其转换为

但是,我想处理这样一种情况,即引号可以作为
”,即
{link name=“link 2”url=”http://www.google.com“}
,但我仍然希望在原始输出中呈现此内容

目前,我有一个匹配的
(?{link name=[\“|]url=[\“|]})
,但返回


就我的一生而言,我不知道如何在
和返回的
值中不包含

一位同事教我被动匹配

我应该使用
()
,而不是
[]
来处理某些部件。然后为了确保这些部件不会被退回,我可以使用
(?:)
来防止它们作为替换的匹配项被退回


我得到的正则表达式是
(?{link name=(?:\“(?:”)(?[^\”])(?:“(?:”)url=(?:“(?:”))(?[^\”)(?:“(?:”)(?:”)
您不太需要在
(?:“(?:)
中使用内部的
(?:…)
;然后像这样使用它:

(?:\"|&quot;)
(?<link>{link name=(\"|&quot;)(?<name>(?:(?!\2).)*)\2 url=(\"|&quot;)(?<url>(?:(?!\4).)*)\4})
但是,为了确保没有与
的链接,您可以实际捕获引号并像这样使用它:

(?:\"|&quot;)
(?<link>{link name=(\"|&quot;)(?<name>(?:(?!\2).)*)\2 url=(\"|&quot;)(?<url>(?:(?!\4).)*)\4})

很不错的。对于提供详细解释的在线正则表达式测试程序,+1。唯一需要注意的是.NET处理带编号的反向引用的方式不同。它将首先计算未命名引用,然后计算命名引用,因此\2实际上需要是\1。@鲁本,不客气!是的,我觉得regex101很棒:)哦,我不知道。谢谢,我会记住的:)