正则表达式重定向一个简单的URL

时间:2015-03-10 09:14:52

标签: regex url redirect

转换表格的任何网址的正则表达式是什么

http://en.wikipedia.org/wiki/Python_(programming_language)

http://en.wikipedia.org/0.5/wiki/Python_(programming_language)

基本上我想识别任何有wikipedia.org的网址并坚持使用" 0.5 /"紧跟在" wikipedia.org /"

之后

3 个答案:

答案 0 :(得分:0)

您可以使用正则表达式,例如:^(.+?wikipedia\.org)(.+)$,然后将其替换为$10.5/$2

正则表达式的示例可用here

答案 1 :(得分:0)

像这样:

$url = preg_replace('~^(http://.+?)/~', '$1/0.5/', $url);

使用URL的正则表达式并正确执行并非易事。上面的正则表达式中有很多可能的边缘情况没有考虑到。

parse_url功能使得处理URL不易出错,并且更容易理解。我建议您使用它,而不是使用正则表达式。

这样的事情应该这样做,虽然你应该更仔细地构建新的URL,检查你需要的是在数组中,并添加下面未包含的其他东西(例如查询字符串,如果它应该是有)。

$version = '0.5';
$parts   = parse_url($url);
$newUrl  = "{$parts['scheme']}://{$parts['host']}/{$version}{$parts['path']}";

答案 2 :(得分:0)

正则表达式用于模式匹配,并且没有开箱即用的替换字符串的功能。

但是,许多RegEx实现都有可用的替换。

在Python中,那将是re.sub()

>>> import re
>>> url = "http://en.wikipedia.org/wiki/Python_(programming_language)"
>>> re.sub("wikipedia.org","wikipedia.org/0.5", url)
'http://en.wikipedia.org/0.5/wiki/Python_(programming_language)'

但是,对于您的使用情况,您不需要使用RegEx库进行替换,因为它与单个字符串替换没有区别。

>>> url.replace("wikipedia.org", "wikipedia.org/0.5")
'http://en.wikipedia.org/0.5/wiki/Python_(programming_language)'

如果你转向正则表达式的原因是为了确保你只匹配有效的URL,你可以尝试事先将字符串与URL模式匹配

>>> is_wikipedia_url = re.compile(r"https?://.*wikipedia.org/(?!0.5).*")
>>> url = "http://en.wikipedia.org/wiki/Python_(programming_language)"
>>> is_wikipedia_url.match(url) is not None
True
>>> url = "http://en.wikipedia.org/0.5/wiki/Python_(programming_language)"
>>> is_wikipedia_url.match(url) is not None
False

在这种情况下,模式为https?://.*wikipedia.org/(?!0.5).*,其中

  • https?://匹配http://https://
  • .*wikipedia.org/匹配任意数字的任意字符,后跟wikipedia.org/
  • (?!0.5)执行否定前瞻声明,如果0.5紧跟wikipedia.org/后面,则阻止网址匹配(因为您不想替换该网址)如果它已经包含0.5)

如果您不使用Python,您还可以使用流编辑器sed

$ echo "http://en.wikipedia.org/wiki/Python_(programming_language)" | sed 's/wikipedia.org/wikipedia.org\/0.5/g'

http://en.wikipedia.org/0.5/wiki/Python_(programming_language)