正则表达式 - 用交替的字符替换字符

时间:2013-07-29 16:30:32

标签: regex url-rewriting

我对Regex的理解很少,我担心那里的无数教程对改善我的情况没有太大帮助。 我想要的是取一个字符串并用交替的字符替换特定的分隔符,从而创建一个名称/值对。 这是用于SEO URL重写目的 - 使用IIS Rewrite。

例如,如果我有以下网址:

http://mydomain.com/mypage_foo_bar_megafoo_freebar_nofoo_closedbar.htm

我需要使用正则表达式将其重写为:

http://mydomain.com/mypage.cfm?foo=bar&megafoo=freebar&nofoo=closedbar

我已经尝试了一段时间并且无处可去 - 有人可以帮助我吗?

由于

编辑:我意识到这不是一个很好的URL结构的好例子 - 它是一个遗留系统,我不允许提供替代方案......唉。

1 个答案:

答案 0 :(得分:3)

如果您只是替换下划线,则可以在没有正则表达式的情况下执行此操作。在您使用的任何语言中使用replaceFirst()方法。使用正则表达式,您只会检测下划线并替换它们,与此相同。喜欢的东西;

myURL = myURL.replaceFirst("_",".cfm?");
while(myURL.contains("_"))
{
    myURL = myURL.replaceFirst("_","=");
    myURL = myURL.replaceFirst("_","&");
}

如果您需要更复杂的一个来防止在URL的其他部分检测下划线,如果您勾勒出可能的组合,我可以帮助您找到一个合适的模式,以便在更换前将域与参数分开

根据下载页面,您在.net中执行此操作? http://www.iis.net/downloads/microsoft/url-rewrite


好的,我已经阅读了这个页面; http://www.iis.net/learn/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module 您将需要匹配字符串,例如;

^([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+).htm

替换字符串,例如

{R:1}.cfm?{R:2}={R:3}

然后,您需要重复此操作以增加变量对的数量,直到您认为合适为止。 匹配字符串;

^([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+).htm

替换字符串;

{R:1}.cfm?{R:2}={R:3}&{R:2}={R:3}

系统似乎是为已知的get请求而设计的,而不是任何随机页面和get请求数。没有提及如何在该指南中应用重复模式。