Решено: Парсинг всех урл с переменной
				
Добавлено: 
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