捕获网址的一部分

时间:2010-02-18 03:21:37

标签: regex

我在编写正则表达式时遇到一些困难。我的输入将是一个网址,如下所示:

http://www.a.com/farms/important-stuff-here#ignorable-stuff

我想捕获(某些东西 - 这里),这是最后一个正斜杠和第一个#符号之间的所有东西(或者只是结尾,如果#符号额外内容不存在。我认为这可能会它:

(http://www.a.com/farms/)
([anything but a # character]*)
(.*)

我不确定如何表达第二组([anything but a # character]*)。

由于

3 个答案:

答案 0 :(得分:1)

对于大多数引擎,您可能需要[^#]^否定字符类。)

答案 1 :(得分:1)

“除了”之外的任何东西都被称为否定字符类,在您的情况下,拼写为

[^#]

你的正则表达式是

http://www.a.com/farms/([^#]+)

答案 2 :(得分:0)

根据您的语言,您可能希望使用可以很好地为您解析网址的模块/库。例如,在PHP中,您可以使用parse_url

$url = "http://www.a.com/farms/important-stuff-here#ignorable-stuff";
$parsed = parse_url($url);
print $parsed['path'];

使用Python,urlparse()例如:

>>> import urlparse
>>> s=""http://www.a.com/farms/important-stuff-here#ignorable-stuff"
>>> urlparse.urlparse(s).path
'/farms/important-stuff-here'

如果您真的想亲手操作,首先要从“#”开始替换所有内容,然后从开头直到替换​​“/”

$ echo "http://www.a.com/farms/important-stuff-here#ignorable-stuff" | sed 's/#.*//;s|.*\/||'
important-stuff-here

或者只使用字符串上的普通分割

$url = "http://www.a.com/farms/important-stuff-here#ignorable-stuff";
$s = explode("#",$url,2);
$t = explode("/",$s[0]);
print end($t);