|
#1
|
|||
|
|||
Парсинг html
Может быть изъезженная тема, но все же. Как спарсить значения из:
Код 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; Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |