Регулярное выражение

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by SultanOFF, 14 Nov 2009.

  1. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    155
    Likes Received:
    6
    Reputations:
    0
    Помогите пожалуйста составить регулярное выражение, никак не могу догнать как работать с этой хитроумной вещью! :mad:
    Code:
    <html>
    <head>
    <title>Здесь заголовок крутого сайта</title>
    <meta name="description" content="Здесь описание крутого сайта, лялял ерундна.">
    <meta name="keywords" content=
    нужно чтобы содержание текста между тегами <title> и </title> записалось в переменную A, а содержание описания записалось в переменную B. Помогите пожалуйста :(
     
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    я не знаю на чем ты пишешь. на PCRE у меня получилось примерно такое выражение
    /<title>(.*?)<\/title>\r\n.*iption\" content=\"(.*?)\"/
     
    _________________________
  3. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    155
    Likes Received:
    6
    Reputations:
    0
    Я пишу на делфи, с помощью компонента regexpr. Я попробовал с твоим кодом:
    Code:
    procedure TForm1.btn2Click(Sender: TObject);
    var
    Reg1: TRegExpr;
    begin
    Reg1 := TRegExpr.Create;
    Reg1.Expression:= '<title>(.*?)<\/title>\r\n.*iption\" content=\"(.*?)\"';
    if Reg1.Exec(mmo1.Text) then
    ShowMessage(Reg1.Match[1])
    else ShowMessage('Не найдено');
    end;
    в итоге пишет не найдено :( Может стоить перед <title> поставить * ? Пробую, вылетает ошибка :(
     
  4. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    хмм делфи... ну попробуй замени \r\n на '.#10#13.' эмм или #13#10 не помню коды )
    типа
    Reg1.Expression:= '<title>(.*?)<\/title>'.#10#13.'.*iption\" content=\"(.*?)\"';
     
    _________________________
  5. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    PHP:
    procedure TForm1.btn2Click(SenderTObject);
     var 
    Reg1TRegExpr;
     
    begin
      Reg1 
    := TRegExpr.Create;
      
    Reg1.Expression:= '<title>(.+?)<.title>';
      if 
    Reg1.Exec(mmo1.Textthen
         ShowMessage
    (Reg1.Match[1])
      else
         
    ShowMessage('Не найдено');
     
    end;
     
  6. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    155
    Likes Received:
    6
    Reputations:
    0
    записывал так Reg1.Expression:= '<title>(.*?)<\/title>'+#10#13+'.*iption\" content=\"(.*?)\"'; и не найдено в итоге, попробовал Reg1.Expression:= '<title>(.+?)<.title>'; выдало заголовок, теперь осталось вывести только описание :(
     
  7. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    155
    Likes Received:
    6
    Reputations:
    0
    спасибо Гарик, спасибо eLWAux Вы Мне очень помогли :)
     
  8. iroot

    iroot New Member

    Joined:
    27 Oct 2008
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Ну в описании я подозреваю будет что-то типа:
    Code:
    Reg1.Expression:= '<meta name="description" content="(.+?)">
    ';