需要一些带有(正则表达式)的 C# 代码,这将改变 url 域
Posted
技术标签:
【中文标题】需要一些带有(正则表达式)的 C# 代码,这将改变 url 域【英文标题】:Need some C# code with(Regex) which will change url domain 【发布时间】:2011-01-02 04:35:17 【问题描述】:假设我们有一些文本:
Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Vivamus cursus vestibulum quam, et tristique nisi tristique ac。 Nam ac risus vehicula tortor facilisis tincidunt。 Aliquam 在 nisi vel arcu aliquet dignissim nec et massa。 Curabitur vel magna eros,accumsan rutrum augue。 Lorem ipsum http://subdomain-1.example.com/dir1 dolor sit amet, consectetur adipiscing elit。 Nunc ut vehicula purus。 Phasellus nunc diam, hendrerit in ultrices vitae, adipiscing ut odio。类 aptent taciti socialsqu ad litora torquent per conubia nostra, per inceptos himenaeos。 Cras molestie felis nec diam sollicitudin placerat pellentesque metus dapibus。 Aliquam ipsum ante, lacinia porta http://subdomain-2.example.com/dir2 faucibus non, nunc 的搬运工。 Quisque suscipit, urna sit amet rhoncus bibendum, elit mi rhoncus lorem, ac luctus lectus nunc in velit。
需要找到所有 URL 并用给定的域名替换域名的 c# 函数,例如 ex example.com 到 ***.com,但其他一切都保持不变(子域和 url 的其余部分)。
例如替换后的文本应该是这样的:
Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Vivamus cursus vestibulum quam, et tristique nisi tristique ac。 Nam ac risus vehicula tortor facilisis tincidunt。 Aliquam 在 nisi vel arcu aliquet dignissim nec et massa。 Curabitur vel magna eros,accumsan rutrum augue。 Lorem ipsum http://subdomain-1.***.com/dir1 dolor sit amet, consectetur adipiscing elit。 Nunc ut vehicula purus。 Phasellus nunc diam, hendrerit in ultrices vitae, adipiscing ut odio。类 aptent taciti socialsqu ad litora torquent per conubia nostra, per inceptos himenaeos。 Cras molestie felis nec diam sollicitudin placerat pellentesque metus dapibus。 Aliquam ipsum ante, lacinia porta http://subdomain-2.***.com/dir2 faucibus non, nunc 的搬运工。 Quisque suscipit, urna sit amet rhoncus bibendum, elit mi rhoncus lorem, ac luctus lectus nunc in velit。
【问题讨论】:
这最初似乎是一个很容易解决的问题——甚至可能是家庭作业。你已经有什么代码,你有什么问题? 当然,在现实世界中这并不容易,因为您希望将 subdomain-1.example.com 替换为 subdomain-1。 ***.com 和 subdomain-1.example.co.uk 替换为 subdomain-1.***.co.uk,但 not 已将 example.google.com 替换为 ***.google.com 而且您不能只检查三级域以查找以 .uk 结尾的任何内容,因为周围还有少数域是用 just 注册的something.uk,在英国决定每个域都必须在第三级注册之前。 匹配所有理论案例是否有意义?通常,在设计正则表达式之前,您会知道必须处理哪些子域以及要替换的 url 是什么(我假设这是特定替换所必需的)。 【参考方案1】:我认为这可行:
Regex r = new Regex("@(?<SCHEME>https?://)(?<SUBDOMAIN>([^.]+\.)*)example\.com(?<PATH>/.*)?");
string newText = r.Replace(text, "$SCHEME$SUBDOMAIN***.com$PATH");
我使用命名组是因为它们更易于跟踪和阅读。第一个是方案,http://
或 https://
,第二个抓取子域,最后一个抓取可选路径(您可能有 http://foo.example.com
或 http://foo.example.com/
或 http://foo.example.com/bar
)
【讨论】:
这可能是解决办法:(?<SUBDOMAIN>[^.]+\.)*example\.com
等
@Hogan 需要在小组中,否则是的,你是对的。固定。【参考方案2】:
您使用的正则表达式应该类似于:
s!(http[s]?://[\w\-]+)\.domain\.com([\w\d/]+)!$1.newdomain.org$2!gi
注意:你必须用 C# 的符号重写它。
【讨论】:
这要求旧域和新域在同一个 TLD 上。 我已对其进行了更改以解决 tghw 和 Hogan 的观点 - 请注意,这只是一个一般示例(无论如何,您都不应该只使用其他人的正则表达式而不进行检查/自定义)。以上是关于需要一些带有(正则表达式)的 C# 代码,这将改变 url 域的主要内容,如果未能解决你的问题,请参考以下文章