Захват части URL - PullRequest
       1

Захват части URL

0 голосов
/ 18 февраля 2010

Мне трудно написать регулярное выражение. Мой ввод будет URL-адресом, похожим на это:

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

Я хотел записать (some-stuff-here), что все, что находится между последней косой чертой и первым знаком # (или только окончанием, если дополнительного знака # не существует. Я думал, что это может сделать это:

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

Я не уверен, как выразить 2-ю группу ([anything but a # character]*).

Спасибо

Ответы [ 3 ]

1 голос
/ 18 февраля 2010

«Все, кроме» называется отрицательным классом символов, и, в вашем случае, пишется

[^#]

Ваше регулярное выражение будет

http://www.a.com/farms/([^#]+)
1 голос
/ 18 февраля 2010

Для большинства двигателей вы, вероятно, захотите [^#] (^ отрицает класс символов).

0 голосов
/ 18 февраля 2010

в зависимости от вашего языка, вы можете использовать модули / библиотеки, которые могут анализировать URL для вас. например, в 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...