![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск в тексте
arturich © (2007-03-03 03:50:00)Есть массивный текст в memo1, в нём присутсвуют такие словосочетания: http://неизвестныйтекст.ru
как получить 'неизвестный текст', например, во второй memo2?
заранее спасибо!
arturich (2007-03-03 23:04:00) [1]спасибо, работает!
Dmitrij_K (2007-03-03 22:29:00) [2]тут www.regexpstudio.com все написано по-русски
r:=TRegExpr.Create;
try
r.ModifierStr := 'grs-imx';
r.Expression := 'http://(.*?)\.ru';
if r.Exec(memo2.Text) then
repeat
memo2.Lines.Add(r.Match[1]);
until not r.ExecNext;
finally
r.Free;
end;
arturich (2007-03-03 22:22:00) [3]он вытаскивает линки целиком, как вытащить только то что между http:// и .ru ?
Dmitrij_K (2007-03-03 21:55:00) [4]сайт же написал
Dmitrij_K (2007-03-03 21:55:00) [5]var
r:TRegExpr;
arturich (2007-03-03 21:51:00) [6]Dmitrij_K, а что есть "r"?
Dmitrij_K (2007-03-03 21:41:00) [7]
r:=TRegExpr.Create;
try
r.ModifierStr := 'grs-imx';
r.Expression := ' http://.*?\.ru';
if r.Exec(memo2.Text) then
repeat
memo2.Lines.Add(r.Match[0]);
until not r.ExecNext;
finally
r.Free;
end;
www.regexpstudio.com
arturich (2007-03-03 21:03:00) [8]RASkov, здорово, действительно всё работает
только как с помощью этого кода найти множество таких текстов как http://текст.ru? то есть, чтобы код нашёл все линки?
RASkov (2007-03-03 20:18:00) [9]Т.е. это доработанный вариант [11]...
RASkov (2007-03-03 20:08:00) [10]> [16] arturich © (03.03.07 19:45)
> только убрать параметр Р-1. Пробуйте
С таким раскладом может работать немного неверно....Вот еще вариант:
function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer; //StrUtils.pas
var
I,X: Integer;
Len, LenSubStr: Integer;
begin
if Offset = 1 then
Result := Pos(SubStr, S)
else
begin
I := Offset;
LenSubStr := Length(SubStr);
Len := Length(S) - LenSubStr + 1;
while I <= Len do
begin
if S[I] = SubStr[1] then
begin
X := 1;
while (X < LenSubStr) and (S[I + X] = SubStr[X + 1]) do
Inc(X);
if (X = LenSubStr) then
begin
Result := I;
exit;
end;
end;
Inc(I);
end;
Result := 0;
end;
end;
function ReturnStr(const Str, bStr, eStr: String): String;
var P1, P2, N: Integer;
begin
P1:=PosEx(bStr, Str);
P2:=PosEx(eStr, Str, P1);
N:=P1+Length(bStr);
Result:=Copy(Str, N, P2-N);
end;
Вызов:
Memo2.Lines.Add(ReturnStr(Memo1.Text, 'http://', '.ru'));
или для теста:
ShowMessage(ReturnStr('wetwetr w (.ru) etwet wetwet http://неизвестныйтекст.ru wetr wetwevzxcg e67e45 ae6', 'http://', '.ru'));
Если убрать Р1 то будет логическая ошибка.
arturich (2007-03-03 19:45:00) [11]спасибо вам большое!!
PZ (2007-03-03 19:43:00) [12]В D7 функция
PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;
Вам, в таком случае надо использовать Ф-цию Pos или оставить как есть в примере, только убрать параметр Р-1. Пробуйте.
Я больше не могу оставаться в Internet сегодня.
arturich (2007-03-03 19:24:00) [13]у меня delphi 6, uses StrUtils добавил
Функция PosEx такая:
function PosEx(Substr: string; S: string;): Integer;
begin
end;
всё ли правильно?
PZ (2007-03-03 19:06:00) [14]В [11] я дал работающий пример для Delphi 7. Повторите его у себя, не забудьте добавить uses StrUtils;. Еще раз повторяю: этот пример работает.
arturich (2007-03-03 18:53:00) [15]функция posex представляет собой Substr: string и S: string
тогда если P2 := PosEx('.ru', Memo1.text, P1+1); нужно дописать какой-то параметр в функцию, иначе P1+1 программа считает лишним параметром (
PZ (2007-03-03 18:42:00) [16]Вот работающий вариант:
uses StrUtils;
Var
P1, P2 : Integer;
S : String;
procedure TForm1.Button1Click(Sender: TObject);
begin
P1 := PosEx('http://', Memo1.text);
P2 := PosEx('.ru', Memo1.text, P1+1);
S := Copy(Memo1.text, P1+7, P2-(P1+7));
ShowMessage(S);
end;
arturich (2007-03-03 18:25:00) [17]PosEx('.ru', Memo1.text, P1+1);
too many actual parameters пишет для куска , P1+1);
PZ (2007-03-03 18:13:00) [18]PosEx - это функция такая, ищет позицию подстроки в строке. См. Справку по F1
arturich (2007-03-03 18:06:00) [19]что тут является posex? O_o
PZ (2007-03-03 17:47:00) [20]Приблизительно так:
P1, P2 : Integer;
S : String;
P1 := PosEx('http://', Memo1.text);
P2 := PosEx('.ru', Memo1.text, P1+1);
S := Copy(Memo1.text, P1+9, P2-(P1+8));