crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Выборка по ключевым словам
Введите ваше имя
Подтвердите код

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

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
kwisp Дата 3.3.2010, 16:02
  ясно.
я пример привел, относительно первого поста. выже не сказали что <pod> может быть сколько угодно.
вам уже подсказали QRegExp::setMinimal()


Цитата(Гость_Ponter_* @ 3.3.2010, 14:37) *
kwisp, это не подходит, потому что этих <pod> может быть сколько угодно.

подойдёт с небольшим изменением.
описываю регулярку словами, скорее всего в коде ошибусь. всё от начала строки или "</pod>" до "<pod>" затем всё до конца строки либо "</pod>"
QRegExp reg("(^\|(</pod>))(.+)<pod>(.+)((</pod>)\|$)");
while((int pos = reg.indexIn(str,0))!=-1)  {
strL1.append(reg.cap(3));// не уверен на счет 3
strL2.append(reg.cap(4));
}

всё равно в регулярке "ошибся" последнее слово не схавает.
минутку

можно так попробовать
QRexExp reg("(<pod>)\|(</pod>)");
QStringList strL = str.split(reg);

если начало строки не <pod> то нечетные элементы списка это элементы первого списка, четные это элементы второго. :)
|| так
QRexExp reg("</?pod>");
QStringList strL = str.split(reg);
Litkevich Yuriy Дата 3.3.2010, 15:39
  Ponter
ты забыл:
Цитата(Litkevich Yuriy @ 3.3.2010, 16:34) *
сделать её не жадной.
Ponter Дата 3.3.2010, 14:37
  kwisp, это не подходит, потому что этих <pod> может быть сколько угодно.
Можете подсказать регулярные выражения для обоих случаев для выборки простого текста и внутри тегов.
<pod>.*</pod> для первого случая не подходит

Ponter Дата 3.3.2010, 14:24
  Ошибся. Вот так написал:
QStringList txtList = txt_text->toPlainText().split(QRegExp("<var>.*</var>"));
и вывелось "Введите в поле код "и все

kwisp Дата 3.3.2010, 14:24
  можно еще воспользоваться
QRegExp::cap(int n)
следующим образом, к примеру:
QRegExp reg("(.+)<pod>(.+)</pod>(.+)<pod>(.+)</pod>(.+)");
while((int pos = reg.indexIn(str,0))!=-1) {
strL1.append(reg.cap(1));
strL1.append(reg.cap(3));
strL1.append(reg.cap(5));
strL2.append(reg.cap(2));
strL2.append(reg.cap(4));
}
Ponter Дата 3.3.2010, 14:16
 
Цитата(Litkevich Yuriy @ 3.3.2010, 13:34) *
<pod>.*</pod>
сделать её не жадной.
Эта регулярка будет соответствовать:
<pod>kod_value</pod>
<pod>two_kod</pod>

И её использовать в функции split.

Пишу QStringList txtList = txt_text->toPlainText().split(QRegExp("<pod>*.</pod>"));
получается txtList имеет один элемент, это вся строка которая рассматривается,не выходит:(
Litkevich Yuriy Дата 3.3.2010, 13:34
  Я думаю, тут в два захода надо делать.
Такую регулярку взять за основу:
<pod>.*</pod>
сделать её не жадной.
Эта регулярка будет соответствовать:
<pod>kod_value</pod>
<pod>two_kod</pod>

И её использовать в функции split. Соответственно получишь:
Введите в поле код
для
сохранения


А за второй заход выделять то, что внутри тэгов
Ponter Дата 3.3.2010, 12:59
  Всем привет, подскажите, пожалуйста, как в строке, например:
"Введите в поле код <pod>kod_value</pod> для <pod>two_kod</pod> сохранения"
Выдрать отдельно два QStringList ("Введите в поле код ", "для" "сохранения") и ("kod_value" и "two_kod") ?
Пытался сделать через регулярное выражение и split, но не получается...есть идеи какие-нибудь?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 15:07