• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Проблема С Regexpr

zloy Оффлайн

zloy

Принятый Кодер
Регистрация
9 Янв 2016
Сообщения
38
Баллы
50
Код:
procedure TForm1.btn1Click(Sender: TObject);
var
  r: TRegExpr;
  strReg,result1, result2, result3: string;
begin

  r := TRegExpr.Create;
  strReg := '[%%слово1%]111[%%слово2%] this is an example abc123123abc this is an example [%%слово3%]';
  //r.Expression := '\[%%(.*?)%\]\s';
  //r.Expression := '\[%%(.*?)%\]';
 r.Expression := '\[%%(.*?)%\]';
  if (r.Exec(strReg)) then
  begin
    result1 := r.Match[1];
    result2 := r.Match[2];
    result3 := r.Match[3];
  end
  else
    showmessage('Не найдено');
  mmo1.Lines.Add(result1);
  mmo1.Lines.Add(result2);
  mmo1.Lines.Add(result3);
end;
получаю только result1 = слово1 остальные пустые как поправить
 
Sascha Оффлайн

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,549
Баллы
155
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  r: TRegExpr;
  strReg,result1, result2, result3: string;
begin

  r := TRegExpr.Create;
  strReg := '[%%слово1%]111[%%слово2%] this is an example abc123123abc this is an example [%%слово3%]';
  //r.Expression := '\[%%(.*?)%\]\s';
  //r.Expression := '\[%%(.*?)%\]';
r.Expression := '\[%%(.*?)%\]';
  if (r.Exec(strReg)) then
  repeat
  result1 := r.Match[1];
  result2 := r.Match[2];
  result3 := r.Match[3];
  memo1.Lines.Add(result1);
  memo1.Lines.Add(result2);
  memo1.Lines.Add(result3);
  until not r.ExecNext
  else
  showmessage('Не найдено');

  end;
Както так
 
zloy Оффлайн

zloy

Принятый Кодер
Регистрация
9 Янв 2016
Сообщения
38
Баллы
50
спасибо помогло
Код:
  r.Expression := '\[%%(.*?)%\]';
  if (r.Exec(strReg)) then
    repeat
      result1 := r.Match[1];
      mmo1.Lines.Add(result1);
    until not r.ExecNext
  else
    showmessage('Не найдено');
без цикла никак? я думал регулярка должна была создать массив нет?
 
Sascha Оффлайн

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,549
Баллы
155
без цикла у тебя находит первую строку и всё , потому и выдает "Слово 1 "а остальные не показывает
 
Вверх Снизу