Решено: Парсинг всех урл с переменной
Добавлено:
15.03.2016 15:14:51
azsx
Задача, есть переменная, в ней уже спарсенна веб страница. Я хочу выделить из нее все домены и поддомены, в том числе и национального написания доменов. Ну и вывести их куда нибудь, например в массив. Важно, мне нужны все url, не только в <a href="url"
Нет ли готовой процедуры у кого нибудь?
---------
не нашл, написал.
Re: Парсинг всех урл с переменной
Добавлено:
17.03.2016 12:10:02
Kitayets
TRegExp + само регулярное выражение найди в гугле.
вот так примерно:
goole.com -> "регулярное выражение для url"
Добавлено спустя 1 минуту 39 секунд:вот такое предлагают (>:-0)
- Код: Выделить всё
/(https?:\/\/)?(www\.)?([-а-яa-zёЁцушщхъфырэчстью0-9_\.]{2,}\.)(рф|[a-z]{2,6})((\/[-а-яёЁцушщхъфырэчстьюa-z0-9_]{1,})?\/?([a-z0-9_-]{2,}\.[a-z]{2,6})?(\?[a-z0-9_]{2,}=[-0-9]{1,})?((\&[a-z0-9_]{2,}=[-0-9]{1,}){1,})?)/i
Re: Парсинг всех урл с переменной
Добавлено:
17.03.2016 15:05:34
azsx
правильно ли я перевел отсюда, что пакет старый, не поддерживается и ваще не доступен для скачивания?
This is the oldest implementation. It is present in packages/regexpr/src/old and is not currently compiled by the makefiles, so it is not available precompiled by default in released FPC/Lazarus versions.
http://wiki.freepascal.org/Regexpr
Re: Парсинг всех урл с переменной
Добавлено:
17.03.2016 15:18:52
Дож
azsx, перевели правильно, но про regexpr от Florian. Вам нужен regexpr от Sorokin, который является нормальным работающим пакетом.
Re: Парсинг всех урл с переменной
Добавлено:
17.03.2016 15:43:11
azsx
огромное спасибо, недоперевел (недопонял сразу). Работающий пакет, оказывается лежит сразу в лазарус /lazarus/components/synedit/
Возникает иная загадка. Как мне в regexpr реализовать выборку национальных доменов? Ну вот типа .ไทย (тайланд).
Re: Парсинг всех урл с переменной
Добавлено:
17.03.2016 15:52:33
Дож
Нужно корректно обрабатывать юникодные символы. Вот тут
http://stackoverflow.com/questions/4983 ... n-pcre-phpрекомендуют использовать \p{L} для юникодной буквы в регулярке с включённым модификатором u.
Я бы ещё на вашем месте ещё предварительно проверил, что паскалевский regexpr корректно обратабывает \p{L} и поддерживает модификатор u.
Re: Парсинг всех урл с переменной
Добавлено:
17.03.2016 16:41:49
azsx
сложно утверждать наврняка, но судя по всему не работает
Re: Парсинг всех урл с переменной
Добавлено:
17.03.2016 18:29:08
Дож
Тогда имеет смысл поискать либу, лучше поддерживающую pcre.
Вот здесь вроде полная обёртка есть:
http://www.regular-expressions.info/delphi.htmlДобавлено спустя 1 час 34 минуты 51 секунду:Я посмотрел на эту либу — не понравилась. Какая-то монструозная жуть с VLC, линковкой и windows only подходом.
Нашёл гораздо лучше:
http://renatomancuso.com/software/dpcre/dpcre.htm\p{L} поддерживает:
- Код: Выделить всё
uses
pcre;
var
F: File;
Regex: IRegex;
procedure Test(const S: AnsiString);
var
Res: AnsiString;
begin
BlockWrite(F, S[1], Length(S));
if Regex.IsMatch(S) then begin
Res := ' matched' + #10;
end else
Res := ' does not matched' + #10;
BlockWrite(F, Res[1], Length(Res));
end;
begin
Close(output);
Assign(F, '');
Rewrite(F, 1);
Regex := RegexCreate('.*\p{L}.*', [rcoUTF8]);
Test('j');
Test('й');
Test('5');
Test('ไ');
Test('ท');
Test('ย');
Test('.');
Test('-');
Test('/');
end.
- Код: Выделить всё
j matched
й matched
5 does not matched
ไ matched
ท matched
ย matched
. does not matched
- does not matched
/ does not matched