假设我想转此:
http://en.wikipedia.org/wiki/Anarchy
进入这个:
en.wikipedia.org
甚至更好,这个:
wikipedia.org
这在regex中是否可能?
答案 0 :(得分:9)
为什么Ruby拥有库时使用正则表达式? The URI library:
ruby-1.9.1-p378 > require 'uri'
=> true
ruby-1.9.1-p378 > uri = URI.parse("http://en.wikipedia.org/wiki/Anarchy")
=> #<URI::HTTP:0x000001010a2270 URL:http://en.wikipedia.org/wiki/Anarchy>
ruby-1.9.1-p378 > uri.host
=> "en.wikipedia.org"
ruby-1.9.1-p378 > uri.host.split('.')
=> ["en", "wikipedia", "org"]
拆分主机是分离域的一种方法,但是我不知道可靠的方式来获取基域 - 如果是的话,你不能只计算像“http://somedomain.otherdomain.school.ac.uk”和“www.google.com”这样的网址。
答案 1 :(得分:2)
/http:\/\/([^\/]*).*/
将根据您提供的字符串生成en.wikipedia.org。
/http:\/\/.{0,3}\.([^\/]*).*/
将生成wikipedia.org。
答案 2 :(得分:1)
是
现在我知道你没有问过怎么样,而且你没有指定语言,但我还是会回答......(注意,这适用于所有语言子站点,而不仅仅是en.wikipedia ...... )
perl的:
$url =~ s,http://[a-z]{2}\.(wikipedia\.org)/.*,$1,;
红宝石:
url = url.sub(/http:\/\/[a-z]{2}\.(wikipedia\.org)\/.*/, '\1')
PHP: $ url = preg_replace('| http://[a-z] {2}。(wikipedia.org)/.* |,'$ 1',$ url);
当然,对于这个特殊的例子,你甚至不需要正则表达式,只需要这样做:
url = 'wikipedia.org'
但我开玩笑......
您可能希望处理任何网址并提取域名部分,它也适用于不同国家/地区的域名,例如:foo.co.uk
。
在这种情况下,我会使用Mark Rushakoff的解决方案获取主机名,然后使用正则表达式来提取域名:
domain = host.sub(/^.*\.([^.]+\.[^.]+(\.[a-z]{2})?)$/, '\1')
希望这有帮助
另外,如果您想了解更多信息,我可以在线获取正则表达式:http://tech.bluesmoon.info/2006/04/beginning-regular-expressions.html
答案 3 :(得分:0)
当然,您所要做的就是搜索http://(。*)/ wiki / Anarchy
在Perl中(对不起,我不认识Ruby,但我希望它类似)
$ string_to_search = ~s / http:////(。)//。应该给你wikipedia.org 要摆脱恩,你只需搜索http:////en(。)//。 .....
应该这样做。
更新:如果你不熟悉正则表达式,我会建议你拿一本正则表达式的书,这本书非常好看,我喜欢它:REGEX BOOK,掌握正则表达式,我前几天在half.com上看到了它对于14.99使用,但澄清我上面提到的,是寻找字符串http://en,然后对于任何事情,直到你找到一个/这全部被捕获在$ 1(在perl中,不确定它是否在ruby中是相同的),一个简单的打印$ 1将打印字符串。
更新:#2抱歉,正则表达中的明星由于某种原因没有出现,所以你看到了。在()和//之后想象一个*,哦,我忘了为en部分添加一个/。最后你不会以.wikipedia.org
结束