Как найти URL в блоге? - PullRequest
       5

Как найти URL в блоге?

2 голосов
/ 14 декабря 2011

Я пишу скрипт для получения URL-адресов из моих сообщений в блоге и запускаю curl -I над ними, чтобы я мог проверить, что они все еще хороши Однако у меня проблемы с написанием шаблона grep.

<p><a href="http://example.com/fujipol/2004/may/5/16:10:47/400x345">foobar</a></p>

Так вот, я хочу просто http://example.com/fujipol/2004/may/5/16:10:47/400x345.

Или в уценке, как:

[Example markdown link](https://example.com)

Хочу https://example.com

<http://example.com/?foo=bar>

В этом случае мне нужно http://example.com/?foo=bar

1 Ответ

6 голосов
/ 14 декабря 2011

Создан файл со ссылками из ваших примеров:

$> cat ./text
<p><a href="http://example.com/fujipol/2004/may/5/16:10:47/400x345">foobar</a></p>
[Example markdown link](https://example.com)
<http://example.com/?foo=bar>
<a href="http://people.debian.org/~dilinger/backports/wordpress">http://people.debian.org/~dilinger/backports/wordpress</a>

"Greped" с некоторым регулярным выражением и получил все URL-адреса из него:

$> grep --only-matching --perl-regexp "http(s?):\/\/[^ \"\(\)\<\>]*" ./text
http://example.com/fujipol/2004/may/5/16:10:47/400x345
https://example.com
http://example.com/?foo=bar
http://people.debian.org/~dilinger/backports/wordpress
http://people.debian.org/~dilinger/backports/wordpress

Готово.

http(s?):\/\/[^ \"\(\)\<\>]*

То, что мы здесь сделали, соответствует http(s) (URL может начинаться с http:// или https://), чем мы сопоставили // и избежали его.И, наконец, мы сопоставили последовательность символов, не равную или " или ( или ) или < или >.

Наконец, вся проблема в подобных задачах заключается в том, чтовыяснил, как мне решить, что раздел, который нам нужен, начинается (http(s):// в этом случае) и заканчивается (, ", (, ), <, >).

Честно говоря, это решение на самом деле не идеально.Некоторые стандарты URL содержат гораздо больше информации о символах, которые URL может включать или не включать.Итак, сразу вы поймете, что использование регулярных выражений в моем ответе недопустимо.Но в случаях, которые вы описали, это работает, продают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...