Перейти к содержанию
Fire Monkey от А до Я
  • 0

Почему на билдере для регулярных выражений не работает "?:"


antarey

Вопрос

Господа подскажите, почему на билдере для регулярных выражений не работает "?:"

 

#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

Вижу 2 ошибки:

  1. У Вас не верная формула для поиска. С этой формулой (? :(<a href=\"))(\\S+)(? :(\">)) Вы не найдете то, что Вам необходимо. Эта формула не работает так же в Perl и Notepad++
  2. Я у Вас вижу 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 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...