.net 用于替换的带字符的正则表达式
我有一个用于替换的.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=
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=(?:“(?:”))(?[^\”)(?:“(?:”)(?:”)
您不太需要在(?:“(?:)
中使用内部的(?:…)
;然后像这样使用它:
(?:\"|")
(?<link>{link name=(\"|")(?<name>(?:(?!\2).)*)\2 url=(\"|")(?<url>(?:(?!\4).)*)\4})
但是,为了确保没有与“
和”
的链接,您可以实际捕获引号并像这样使用它:
(?:\"|")
(?<link>{link name=(\"|")(?<name>(?:(?!\2).)*)\2 url=(\"|")(?<url>(?:(?!\4).)*)\4})
很不错的。对于提供详细解释的在线正则表达式测试程序,+1。唯一需要注意的是.NET处理带编号的反向引用的方式不同。它将首先计算未命名引用,然后计算命名引用,因此\2实际上需要是\1。@鲁本,不客气!是的,我觉得regex101很棒:)哦,我不知道。谢谢,我会记住的:)