转换表格的任何网址的正则表达式是什么
http://en.wikipedia.org/wiki/Python_(programming_language)
到
http://en.wikipedia.org/0.5/wiki/Python_(programming_language)
基本上我想识别任何有wikipedia.org的网址并坚持使用" 0.5 /"紧跟在" wikipedia.org /"
之后答案 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)