antarey Опубликовано 26 мая, 2014 Поделиться Опубликовано 26 мая, 2014 Господа подскажите, почему на билдере для регулярных выражений не работает "?:" #include <System.RegularExpressions.hpp> // --------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TfrmMain *frmMain; // --------------------------------------------------------------------------- __fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) { } // --------------------------------------------------------------------------- void __fastcall TfrmMain::Button1Click(TObject *Sender) { UnicodeString str, Otpravitel, Tema, Otpravleno, Prochitano, url; str = Memo1->Lines->Text.SubString(Memo1->Lines->Text.Pos("Отправитель"), Memo1->Lines->Text.Length()); str = str.SubString(1, str.Pos("Удалить")); TStrings *text = new TStringList(); text->Text = str; text->Delete(0); text->Delete(0); text->Delete(0); if (TRegEx::Matches(text->Text, "(?:<a href=\")(\\S+)(?:\">)").Count > 0) { for (int i = 0; i < TRegEx::Matches(text->Text, "(?:<a href=\")(\\S+)(?:\">)").Count; i++) { url = TRegEx::Matches(text->Text, "(?<a href=\"))(\\S+)(?\">))") .Item[i].Value; Memo2->Lines->Add(url); } } } // --------------------------------------------------------------------------- На входе <a href="messanger.cgi?action=read&msg=2"> <a href="messanger.cgi?action=read&msg=1"> <a href="messanger.cgi?action=read&msg=0"> Тоже получаю и на выходе ????? Цитата Ссылка на комментарий
0 Nix0N Опубликовано 26 мая, 2014 Поделиться Опубликовано 26 мая, 2014 Вижу 2 ошибки: У Вас не верная формула для поиска. С этой формулой (? <a href=\"))(\\S+)(? \">)) Вы не найдете то, что Вам необходимо. Эта формула не работает так же в Perl и Notepad++ Я у Вас вижу 4 группы, но на выходе Вы ни к одной не обращаетесь и по-этому получаете исходную строку. В данном случае вопрос с FireMonkey никак не связан... P.S. Если опишите какие данные в итоге хотите получить - пишите в личку. Подскажу как сделать, так как эту тему скорее всего удалят... Либо так: url = TRegEx::Matches(text->Text, "(?<a href=\"))(\\S+)(?\">))").Item[i].Groups[n].Value; Где n - номер группы. Группа - это данные, которые располагаются между () Пример Delphi procedure TForm1.Button1Click(Sender: TObject); var RegEx: TRegEx; M: TMatchCollection; begin RegEx := TRegEx.Create('(<a href=\"(.*?)\">)'); if RegEx.IsMatch('<a href="messanger.cgi?action=read&msg=2">')then begin M := RegEx.Matches('<a href="messanger.cgi?action=read&msg=2">'); //Вторая группа содержит текст между кавычками Memo1.Lines.Add(M.Item[0].Groups[2].Value); end; end; На выходе: messanger.cgi?action=read&msg=2 Kitty, Andrey Efimov и rareMax 3 Цитата Ссылка на комментарий
Вопрос
antarey
Господа подскажите, почему на билдере для регулярных выражений не работает "?:"
На входе
Ссылка на комментарий
1 ответ на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.