我在编写正则表达式时遇到一些困难。我的输入将是一个网址,如下所示:
http://www.a.com/farms/important-stuff-here#ignorable-stuff
我想捕获(某些东西 - 这里),这是最后一个正斜杠和第一个#符号之间的所有东西(或者只是结尾,如果#符号额外内容不存在。我认为这可能会它:
(http://www.a.com/farms/)
([anything but a # character]*)
(.*)
我不确定如何表达第二组([anything but a # character]*
)。
由于
答案 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);