【问题标题】:How to perform link rewriting with a .NET Regex?如何使用 .NET 正则表达式执行链接重写?
【发布时间】:2010-02-22 02:48:40
【问题描述】:

我需要使用 C#Regex 对 html 页面进行链接重写,并且我需要将引号 (") 括起来的链接替换为我自己的链接。例如,我需要替换以下内容

"slashdot.org/index.rss"

进入

"MY_OWN_LINK"

但是,实际的链接可以是格式

"//slashdot.org/index.rss" or
"/slashdot.org/index.rss"

"slashdot.org/index.rss" 之前但在引号 (") 之后可以有其他值,我不关心。

总而言之,只要链接以"slashdot.org/index.rss" 结尾,我想将整个链接替换为"MY_OWN_LINK"

我如何在上面使用Regex.Replace

【问题讨论】:

  • 不要对 HTML 使用正则表达式。这是一个非常糟糕的主意。另外,您还不是很清楚您的要求是什么。
  • @Lopper:与 JavaScript 不同,C# 编程语言不支持正则表达式。
  • @John Saunders:嗯? .NET 语言比 JavaScript 有更好的正则表达式支持。
  • @Tim:不,.NET 语言支持 no 正则表达式。 .NET Framework 可以,而不是语言。这与 JavaScript 不同,后者的正则表达式支持是语言本身的一部分。
  • @John,这在技术上可能是正确的,但它正在分裂头发。据我所知,在 .NET 平台之外没有主要的 C# 实现。

标签: c# html regex replace rewrite


【解决方案1】:

编辑:根据评论更新答案。

首先,您不必为此作业使用正则表达式。只需检查字符串是否以 `"slashdot.org/index.rss"' 结尾,如果是,则替换整个字符串。

如果你使用正则表达式,你最好只测试字符串是否以 "slashdot.org/index.rss" 并采取相应措施,如下所示:

if (Regex.IsMatch(str,"slashdot.org/index\.rss$")) {str = new_str;}

如果你坚持使用Regex.Replace,请选择

Regex.Replace(str,"^.*slashdot.org/index\.rss$","MY_OWN_LINK");

其中^$ 分别代表行/字符串开始/结束。第一个.* 表示“捕获URL 的开头,不管它是什么”。最后一个点用斜杠连接,因为它通常表示“任何字符”。

有关更多信息,请参阅 C# 中正则表达式的 cheat sheet

【讨论】:

  • 我想要的是用“MY_OWN_LINK”替换整个链接,只要它以“slashdot.org/index.rss”结尾,而不仅仅是替换它的一部分。
  • 所以更好的是,测试链接是否 EndsWith("slashdot.org/index.rss") 如果是,则替换整个字符串。 msdn.microsoft.com/en-us/library/…
  • 顺便说一句,我在哪里可以找到定义正则表达式字符串(如“.”、“[]”等)中每个元素的作用的 msdn 页面?
  • msdn.microsoft.com/en-us/library/28hw3sce(VS.80).aspx 我用谷歌搜索了“正则表达式 MSDN”。这是第三个链接。
【解决方案2】:

试试这个。将在没有斜杠、单斜杠和两个斜杠的情况下工作。

    string pattern =  @"[/]{0,2}slashdot\.org[/]{0,2}index\.rss";
    test1 = Regex.Replace(test1, pattern, "MY_OWN_LINK");

【讨论】:

  • “[Anystring]slashdot.org/index.rss”的模式是什么,其中 [Anystring] 匹配任意长度的字符串,并且可以是“slashdot.org/”之前的任意值index.rss”?
  • 你可以这样做 @".*slashdot\.org[/]{0,2}index\.rss" 所以 .* 匹配任何东西。这可能很危险,因此请谨慎使用。您可以选择在开头粘贴 ^ 并在末尾粘贴 $ 以匹配完整的字符串,例如 @"^.*slashdot\.org[/]{0,2}index\.rss$"
猜你喜欢
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多