PDA

Просмотр полной версии : Delphi - RegExp (Регулярные выражения)


mailbrush
06.05.2009, 23:23
Либо я что-то не так делаю, либо TRegExpr криво пашет. Есть HTML-страничка. Пытаюсь вывести все ссылки RegExp1.Expression:='<a href=(.*) .*>';
При выводе RegExp1.Match[0] - выводит криво, а т.е. весь документ. RegExp1.Match[1] Так пусто. Посоветуйте как решить эту траблу, или норм. компоннент для регулярок в дельфи.

LEE_ROY
06.05.2009, 23:27
http://forum.vingrad.ru/articles/topic-213075.html

mailbrush
06.05.2009, 23:53
Ну тыкнул ты ссылку, и что? Синтаксис регулярок я знаю. Эту же регулярку применил в PHP - все заработало. Тут - нету. Нечего сказать - промолчи!

-Hormold-
07.05.2009, 00:03
const
EmailRE = '<title>(.*)</title>';
var
code,tmp,html:string;
r : TRegExpr;
begin
html:='<title>епт</title>';
r := TRegExpr.Create;
try
r.Expression := EmailRE;
if r.Exec () then
REPEAT
tmp:=r.Match [1];
code := code + tmp;
UNTIL not r.ExecNext;
finally r.Free;
end;
ShowMessage(code);

eLWAux
07.05.2009, 00:04
Hormold, думаш в файле много title'ов? )

eLWAux
07.05.2009, 00:10
var RegExp : TRegExpr;
input : string;
begin
input := 'Memo1<a href="http://abc.def">nana</a>sabd<a href="http://aaabc.def">nangga</a>as';
RegExp := TRegExpr.Create;

RegExp.Expression := '<a href="(.+?)">(.+?)</a>';
if RegExp.Exec(input) then
repeat
showmessage('Name: '+RegExp.Match[2]+#13#10+
'Url: '+RegExp.Match[1]);
until not RegExp.ExecNext;

/^scriptor$/
20.05.2009, 00:48
вот так привильно:
RegExp1.Expression:='<a href=(.?*) .*>';

LEE_ROY
20.05.2009, 02:36
Ну тыкнул ты ссылку, и что? Синтаксис регулярок я знаю. Эту же регулярку применил в PHP - все заработало. Тут - нету. Нечего сказать - промолчи!
ололо

Fepsis
23.09.2009, 01:24
В силу того, что сайт http://regexpstudio.com/ сейчас по каким-то причинам в дауне, прошу поделиться тем, что было тут http://regexpstudio.com/downloads/regexpr_ru.zip
В большей степени интересует документация, сам компонент я нашёл..)

Chrome~
23.09.2009, 19:08
Не знаю, то ли ты ищешь, или нет, но вот возьми этот Help файл. В нем описаны основные принципы работы с компонентом и примеры регулярных выражений.
http://rapidshare.com/files/283957681/Help.rar.html

Fepsis
24.09.2009, 00:58
RegExp := TRegExpr.Create;
HTMLStr := 'шлак ыврафып<title>ололо!!!!!11</title>шлак фываыв';
RegExp.Expression := '<title>(.+?)</title>';
RegExp.Exec(HTMLStr);
ShowMessage(RegExp.Match[0]);
Выаёт результат <title>ололо!!!!!11</title> (вместе с тегами тайтла)
Пробовал разные комбинации (.+?), (.+), (.*?), (.*) - безрезультатно... :confused:
Как вытащить без тайтлов..?! :rolleyes:

Chrome~
24.09.2009, 16:25
У тебя правильно составлена регулярка. Наверное нужно делать:
ShowMessage(RegExp.Match[1]);

Fepsis
24.09.2009, 19:21
У тебя правильно составлена регулярка. Наверное нужно делать:
ShowMessage(RegExp.Match[1]);
:eek: Вот блин.. Так и есть...
Не понимаю, а зачем он в RegExp.Match[0] это пихает.. :confused:

wolmer
29.09.2009, 00:08
Народ скиньте компонент RegExp для делфи пожалуйста! (ссылки в теме битые, а в гугле нету)

Fepsis
29.09.2009, 17:31
Народ скиньте компонент RegExp для делфи пожалуйста! (ссылки в теме битые, в гугле нету)
http://www.delphisources.ru/files/sources/raznoe/2007_year/regexp_debugger.zip
Там в архиве файл RegExpr.pas как раз и есть этот компонент..)