Topic: [Script] Regular expression

Example how to use regular expression (version 3.06b and later)


Script:

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
  RegExp: TRegExp;
  i: integer;
begin
  RegExp := TRegExp.Create(Form1.Edit1.Text);
  RegExp.InputString := Form1.Memo1.Text;

  if RegExp.Exec then
  repeat
        // matches
        Form1.Memo2.Lines.Add( RegExp.Match[0] );

        // groups
        for i := 1 to RegExp.Match.Count-1 do
            Form1.Memo3.Lines.Add('Group'+IntToStr(i)+': '+RegExp.Match[i]);

  until not RegExp.ExecNext;

  RegExp.Free;
end;

Project example:

Post's attachments

Attachment icon RegExp.zip 4.01 kb, 821 downloads since 2016-12-12 

Dmitry.

Re: [Script] Regular expression

Dmitry, you are a GOD !!


That's not quite a HTML parser, but what a progress and what a time gain already !!!


I guess I  just have to buy that 3.0 when it's out now smile smile smile


Thank you Dmitry, that's awesome


Cheers


Mathias

I'm a very good housekeeper !
Each time I get a divorce, I keep the house

Zaza Gabor

Re: [Script] Regular expression

Здравствуйте Дмитрий!!!
Используя Ваш скрипт "Регулярное выражения"
Попытался сделать запись в Б.Д...MVD...

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
  RegExp: TRegExp;
  i: integer;
  Email: String;
begin
  RegExp := TRegExp.Create(Form1.Edit1.Text);
  RegExp.InputString := Form1.Memo1.Text;

  if RegExp.Exec then
  repeat
        // Матчи
        Form1.Memo2.Lines.Add( RegExp.Match[0] );


        // группы
        for i := 1 to RegExp.Match.Count-1 do
            Form1.Memo3.Lines.Add('Group'+IntToStr(i)+': '+RegExp.Match[i]);

        // запись в Б.Д...MVD...
            Email:=Form1.Memo3.Text;
            SQLExecute ('INSERT INTO AAA (aaa) VALUES ("'+ Email +'");');
            Form1.TableGrid1.dbUpdate;

  until not RegExp.ExecNext;

  RegExp.Free;
end;

1.) Сделал TableGrid1 читаемость-многострочный...работает ОК!!!
2.) У Вас в Form1.Memo3.Text видим:

Group1: tdlite.exe
Group1: js.exe

Проблема в том, что в таблицу "AAA" происходит две записи:
1.  Group1: tdlite.exe
---------------------------------------------------------
2. Group1: tdlite.exe
    Group1: js.exe
Вопрос: Как сохранить запись из переменой "Email" в таблицу "AAA",
что бы в гриде увидеть только ???

Group1: tdlite.exe
Group1: js.exe

Всех ФОРУМЧАН  <<C Новым Годом!!!>>

Re: [Script] Regular expression

Приветствую.


Извиняюсь за задержку с ответом. Вопрос все еще актуален для вас?

Dmitry.

Re: [Script] Regular expression

DriveSoft wrote:

Приветствую.


Извиняюсь за задержку с ответом. Вопрос все еще актуален для вас?

Здравствуйте Дмитрий!!!
Да...вопрос актуален??? пост №3...???

Re: [Script] Regular expression

попробуйте так

if RegExp.Exec then
  repeat
        // Матчи
        Form1.Memo2.Lines.Add( RegExp.Match[0] );


        // группы
        for i := 1 to RegExp.Match.Count-1 do
        begin    
            Email:=  'Group'+IntToStr(i)+': '+RegExp.Match[i];           
            Form1.Memo3.Lines.Add(Email);
            SQLExecute ('INSERT INTO AAA (aaa) VALUES ("'+ Email +'");');
        end;            

  until not RegExp.ExecNext;
  Form1.TableGrid1.dbUpdate;
Dmitry.

7 (edited by RZ-007 2017-01-04 17:40:19)

Re: [Script] Regular expression

Дмитрий прошу прощения...скорей всего за мой не корректный вопрос!!!
Пост № 3
1.) Сделал TableGrid1 читаемость-многострочный...работает ОК!!!
2.) Form1.Memo3.Lines.Add(Email);   // Email: String;

Group1: tdlite.exe
Group1: js.exe

Вопрос:
Как сохранить многострочный текст из переменной  (Email) в одно поле???
рисунок прилагается...

Post's attachments

Attachment icon Скриншот 04-01-2017 201540.png 34.51 kb, 486 downloads since 2017-01-04 

Re: [Script] Regular expression

попробуйте так

Email := '';
if RegExp.Exec then
  repeat
        // Матчи
        Form1.Memo2.Lines.Add( RegExp.Match[0] );

        // группы
        for i := 1 to RegExp.Match.Count-1 do
        begin    
            Email:= Email + 'Group'+IntToStr(i)+': '+RegExp.Match[i] + #10#13;           
            Form1.Memo3.Lines.Add('Group'+IntToStr(i)+': '+RegExp.Match[i]);
        end;            

  until not RegExp.ExecNext;
  SQLExecute ('INSERT INTO AAA (aaa) VALUES ("'+ Email +'");');
  Form1.TableGrid1.dbUpdate;
Dmitry.

Re: [Script] Regular expression

Дмитрий это просто СУПЕР...всё заработало на УРА!!!...Спасибочки!!!
микро вопросик:
есть текст:
kjhkgjhuy....http:// привет 1</h1>...kjhkgjhuy....http:// привет 2</h2>...kjhkgjhuy
kjhkgjhuy....http:// привет 3</h3>...kjhkgjhuy....http:// привет 4</h4>...kjhkgjhuy
Вопрос:
есть способ использовать "Регулярное выражения"

RegExp := TRegExp.Create('http://(.*?)</h1>???????');

итог

привет 1
привет 2
привет 3
привет 4

Re: [Script] Regular expression

попробуйте так

RegExp := TRegExp.Create('http://(.*?)</h');
Dmitry.

Re: [Script] Regular expression

Дмитрий прошу прощения...немножко на путал...
kjhkgjhuy....http:// привет 1<...kjhkgjhuy....http:// привет 2>...kjhkgjhuy
kjhkgjhuy....http:// привет 3>...kjhkgjhuy....http:// привет 4<...kjhkgjhuy

RegExp := TRegExp.Create('http://(.*?)<???????');

Re: [Script] Regular expression

К сожалению я близко не знаком с регулярными выражениями, попробуйте так

http:\/\/(.*?)[<>]

протестировать ваше регулярное выражение можно здесь
http://www.rubular.com/


также рекомендую прочитать введение в регулярные выражения
https://habrahabr.ru/post/115825/
http://www.codenet.ru/webmast/php/regexps.php

Dmitry.

Re: [Script] Regular expression

Огромное СПАСИБО!!!

14 (edited by RZ-007 2017-01-29 19:37:40)

Re: [Script] Regular expression

Доброго времени суток Дмитрий!!!
При использования Regular expression имею:

++++++++++++++++++++++++++++++++++
Form1.Memo1.Lines.Add(RegExp.Match[i]);
========== 2 часть =================
         T :=Form1.Memo1.Text;
          if T <>''  then   // если данные есть   
          Telefon:= (T)    else Telefon :='НЕТ';
          Form1.Memo2.Text := Telefon;

Когда в Form1.Memo1 попадает реально <<число или текст аль символы >> , то вторая часть скрипта работает!!!
...НО когда благодаря Regular expression возвращае в Form1.Memo1 ничего из <<числа или текста аль символов >>...
то в МЕМО мы не чего не видим...получается в нём НЕТ значений...
(но если поставить курсор от мыши, то он будет находиться как бы на второй сточки в МЕМО,
хя значений в нём НЕТ!!!)...и тогда вторая часть НЕ РАБОТАЕТ!!!
Дмитрий подскажите как это можно вылечить???(может как то сделать проверку в переменной "T" на предмет
пустые строки...или есть ли числа или символы???)

Re: [Script] Regular expression

RZ-007
Попробуйте вместо этого

Form1.Memo1.Lines.Add(RegExp.Match[i]);

сделать так

if RegExp.Match[i]<>'' then Form1.Memo1.Lines.Add(RegExp.Match[i]);

т.к. метод Form1.Memo1.Lines.Add добавляет строку, даже если нет текста для добавления.

Dmitry.