Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TRegEx, Поиск в тексте и запоминание совпадения 
V
    Опции темы
Валерия
Дата 24.11.2010, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Использую TRegEx на C++ Buillder XE

Код

TRegEx *reg2;


С поиском разобралась - всё работает:
Код

if (reg2->IsMatch("abc", "b")){
...



С заменой разобралась - всё так-же работает:
Код

reg2->Replace("abcde", "a", "z");


Но вот теперь хочу научиться находить нужное мне по шаблону.
Т.е например есть текст "a1c" и мне нужно по шаблону "a(.*?)с" выделить то, что стоит между "a" и "b" т.е в данном случае это "1"
Делаю так:
Код

TMatch col1 = reg2->Match("a1c", "a(.*)с");
Memo1->Text = col1.Value;

Но в ответ вместо "1" пишет "a1c".
Что я делаю не так?

PM MAIL   Вверх
Alexeis
Дата 24.11.2010, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(Валерия @  24.11.2010,  18:57 Найти цитируемый пост)
Но в ответ вместо "1" пишет "a1c".
Что я делаю не так?

  Потому что так задан шаблон. Если бы строка была типа "уйцкйц__a1c_ыуацйуа", то ответ был бы уже "a1c", а не вся строка. Раз определили, что символы a и с и все что между ними должно входить, значит будет входить. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Валерия
Дата 24.11.2010, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Но ведь должно запомниться всё, что находиться между скобок? (По крайней мере так в php и perl)
Или здесь такое нужно делать по другому?
PM MAIL   Вверх
Alexeis
Дата 24.11.2010, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(Валерия @  24.11.2010,  19:59 Найти цитируемый пост)
Но ведь должно запомниться всё, что находиться между скобок? (По крайней мере так в php и perl)

  Насколько я помню в документации такого поведения не описывалось.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Валерия
Дата 24.11.2010, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Цитата(Alexeis @  24.11.2010,  19:13 Найти цитируемый пост)
Насколько я помню в документации такого поведения не описывалось. 

Возникает тогда вопрос: как сделать то что я хочу?)
PM MAIL   Вверх
Alexeis
Дата 24.11.2010, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Валерия
Дата 24.11.2010, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Цитата(Alexeis @  24.11.2010,  21:39 Найти цитируемый пост)
Валерия, скопировать из строки подстроку нужной длинны начиная с нужного символа. 

Это не вариант, т.к начало символа может быть всегда разное.
Мне нужно именно что бы выполнялся поиск по регулярному выражению.

В php и perl та регулярка, которую я написала, будет работать именно так как я захочу smile

Я была бы очень рада, если бы мне кто-то показал на моём примере, как это сделать на С++ именно с этой либой.

Это сообщение отредактировал(а) Валерия - 24.11.2010, 21:48
PM MAIL   Вверх
Alexeis
Дата 24.11.2010, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Валерия, значит попробовать другой вариант из буста. Он почти стандарт уже http://blog.alno.name/ru/2008/10/using-boost-regex


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Валерия
Дата 24.11.2010, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Цитата(Alexeis @  24.11.2010,  22:01 Найти цитируемый пост)
Валерия, значит попробовать другой вариант из буста. Он почти стандарт уже http://blog.alno.name/ru/2008/10/using-boost-regex 

Наше общение с Вами выглядит так, будто я пришла в магазин покупать туфли от Версаче, а Вы мне говорите "знаете, лучше купите кроссовки Аддидас".
Я ведь попросила показать мне именно на моём примере, а в моём примере я не использую бустовые регулярки.
Прошу не воспринимать как обиду smile

Это сообщение отредактировал(а) Валерия - 24.11.2010, 22:13
PM MAIL   Вверх
Alexeis
Дата 24.11.2010, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Валерия, я пользовался этой либой, изучал доку вдоль и поперек. Извлекать фрагменты регулярки она не умеет, только целиком. Сам я после прохода такой регуляркой извлекал нужный мне кусок руками. Например, в вашем случае нужно копировать начиная с первого символа n - 2 символов, где n длина строки. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Валерия
Дата 24.11.2010, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Неужели регулярка не может извлекать фрагмент? о_О
Не дописали что-ли?)
Дело в том что у меня количество символов всегда может быть разное, поэтому статично нельзя указать номера символов.
А Boost нормально работает на Builder XE под Windows? Если я не ошибаюсь, это ведь никсовая библиотека.
Если нормально дружит, можно ли сразу весь Boost установить, т.е что бы библиотеки, например, работы с потоками тоже сразу установились, а не ставить их по одной?

Это сообщение отредактировал(а) Валерия - 24.11.2010, 23:21
PM MAIL   Вверх
Alexeis
Дата 24.11.2010, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(Валерия @  25.11.2010,  00:15 Найти цитируемый пост)
А Boost нормально работает на Builder XE под Windows?

  Начиная с версии 2009 поставляется специальная адаптированная версия для билдера. И с каждым апдейтом обновляется. Это кросплатформенная либа как и STL.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
oldcode
Дата 25.11.2010, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 8.10.2010

Репутация: 0
Всего: 0



Цитата(Валерия @ 24.11.2010,  22:11)
Наше общение с Вами выглядит так, будто я пришла в магазин покупать туфли от Версаче, а Вы мне говорите "знаете, лучше купите кроссовки Аддидас".

1. Все с точностью до наоборот smile .
2. Зря вы не обратили внимание на пост №2 здесь http://forum.vingrad.ru/forum/topic-315862.html.

Это сообщение отредактировал(а) oldcode - 25.11.2010, 18:50
PM MAIL   Вверх
QVO
Дата 14.2.2014, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.2.2012
Где: Россия

Репутация: нет
Всего: нет



Понимаю что тема старая, но автор не получил ответа на заданный вопрос.

Код

#include <RegularExpressions.hpp>

// URL = https:\\mysite.com\#param=1&length=7

TRegEx regex("param=(.+?)&");
TMatch match = regex.Match(" https:\\mysite.com\#param=1&length=7");
ShowMessage(match.Groups[1].Value);

PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0689 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.