![]() |
|
|
#1
|
|||
|
|||
|
Может быть изъезженная тема, но все же. Как спарсить значения из:
Код HTML:
Код:
<a title=" и href Код:
<div title=" и </div> В регулярных выражениях не получается разобраться |
|
#2
|
||||
|
||||
|
Вроде так маска должна выглядеть для регулярки:
'<a title="(.*)" href=.*<div title="(.*)">' Соответственно возвращать для каждой итерации должна по 2 значения |
|
#3
|
|||
|
|||
|
Скорее вот такое:
Код:
<div title=".*">|<a title=".*" href А вообще вот хороший ресурс для отладки: https://regex101.com/ |
|
#4
|
|||
|
|||
|
Не парсит. Что я делаю не так?
Код:
var
re:TRegExpr;
begin
re := TRegExpr.Create;
re.ModifierM := true;
re.InputString := Memo1.Text;
re.Expression := '<div title=".*">|<a title=".*" href';
re.Compile;
try
if re.Exec(re.InputString) then
repeat
Memo2.Lines.Add(re.Match[2]);
until not re.ExecNext;
finally
re.Free;
end;
end; |
|
#5
|
|||
|
|||
|
Делаю так
Код:
var re:TRegExpr; begin re:=TRegExpr.Create; re.Expression:='<a title="(.*?)" href|<div title="([\d]+)\"'; if re.Exec(memo1.text) then repeat memo2.Lines.Add(trim(re.Match[1])+re.Match[2]); until not re.ExecNext; re.Free; end; Код:
re,Match[1] Код:
re,Match[2] |
|
#6
|
||||
|
||||
|
Все нормально работает. Используйте стандартный модуль для работы с регулярными выражениями.
Код:
uses
RegularExpressions;
...
procedure TForm1.Button1Click(Sender: TObject);
var
RegEx: TRegEx;
M: TMatchCollection;
RegStr: String;
I: LongInt;
begin
RegStr := '<div title=".*">|<a title=".*" href';
RegEx := TRegEx.Create(RegStr);
if RegEx.IsMatch(Memo1.Text)then
begin
Memo2.Clear;
M:=RegEx.Matches(Memo1.Text, RegStr, [roMultiLine, roIgnoreCase]);
for I := 0 to M.Count - 1 do
Memo2.Lines.Add(M.Item[i].Value);
end;
end; |