![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
||||
|
||||
|
Вариаций можно придумать много, ещё в RxLib готовые функции для этого были. Главное эффективность и простота.
|
|
#17
|
|||
|
|||
|
А как найти "0123.45" xx в строке <a href="#nodo" onclick="page.userData.refresh(true);">0123.45 xx</a> если "0123.45 хх" это переменное значение.
|
|
#18
|
||||
|
||||
|
Цитата:
Код:
ShowMessage(Copy(s, 56, Length(s) - 59)); // где s это переменная с этой строкой |
|
#19
|
|||
|
|||
|
Вот этот код подходит
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
KP, KS : Integer;
S, Word : string;
begin
S := RichEdit1.text;
KP := Pos('<a href="#nodo" onclick="page.userData.refresh(true);">', S);
KS := Pos('</a>', S);
while KP > 0 do begin
Word := Copy(S, KP+55, KS-KP-55);
ShowMessage(Word);
Inc(KP); KP := PosEx('<a href="#nodo" onclick="page.userData.refresh(true);">', S, KP);
Inc(KS); KS := PosEx('</a>', S, KS);
if KS = 0 then KS := Length(S)+1;
end;
end;Код:
ShowMessage На всякий случай исходник с текстом прикрепил. |
|
#20
|
||||
|
||||
|
Цитата:
Вот так будет правильнее и попроще: Код:
procedure TForm1.Button1Click(Sender: TObject);
const
cs1: string = '<a href="#nodo" onclick="page.userData.refresh(true);">';
cs2: string = '</a>';
var
KP, KS: Integer;
S, Word: string;
begin
S := RichEdit1.text;
KP := 1;
while True do
begin
KP := PosEx(cs1, S, KP);
if KP = 0 then Break;
Inc(KP, Length(cs1));
KS := PosEx(cs2, S, KP);
if KS = 0 then Break;
Word := Copy(S, KP, KS - KP);
ShowMessage(Word);
KP := KS + Length(cs2);
end;
end; |
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
vbv (16.11.2012)
| ||
|
#21
|
|||
|
|||
|
повторяющаяся тема, в целях обучения все способы хороши, даже посимвольный пробег по строке; самый краткий без регулярок, это функция, которая два раза вызывает delete; а для разнообразия можно сделать регулярками через CreateOLEObject
Код:
uses comobj;
function eval(command:string; lang:string='VBScript'): string;
var
script: Variant;
begin
script := CreateOLEObject('ScriptControl');
try
script.Language := lang;
result := script.eval(command); // no match => error
finally
script := Unassigned;
end;
end;
function match(given, regexp: string; index:integer=0): string;
const script = '"%s".match(%s)[%d];';
begin
given := StringReplace(given, '\', '\\', [rfReplaceAll]);
given := StringReplace(given, '"', '\"', [rfReplaceAll]);
given := StringReplace(given, #13#10, '\n', [rfReplaceAll]);
result := eval(format(script, [given, regexp, index]), 'JScript');
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
ShowMessage('full:'#13#10+ match(given.Text, '/<a href="#nodo".*?>(.+)<\/a>/'));
ShowMessage('inner:'#13#10+ match(given.Text, '/<a href="#nodo".*?>(.+)<\/a>/', 1));
ShowMessage('other:'#13#10+ match(given.Text,'/<a href="#nodo"(.*?)>.+<\/a>/', 1));
end; |
| Этот пользователь сказал Спасибо Pyro за это полезное сообщение: | ||
vbv (16.11.2012)
| ||
|
#22
|
|||
|
|||
|
Всем спасибо за помощь! Всё получилось и отлично работает.
Выкладываю исходник клиента QIWI кошелька (может кому то пригодится), пока только проверка балланса. |
|
#23
|
||||
|
||||
|
Цитата:
Цитата:
Цитата:
![]() |