Всем привет, подскажите, пожалуйста, как в строке, например:
"Введите в поле код <pod>kod_value</pod> для <pod>two_kod</pod> сохранения"
Выдрать отдельно два QStringList ("Введите в поле код ", "для" "сохранения") и ("kod_value" и "two_kod") ?
Пытался сделать через регулярное выражение и split, но не получается...есть идеи какие-нибудь?
Я думаю, тут в два захода надо делать.
Такую регулярку взять за основу:
<pod>.*</pod>
сделать её не жадной.
Эта регулярка будет соответствовать:
<pod>kod_value</pod>
<pod>two_kod</pod>
И её использовать в функции split. Соответственно получишь:
Введите в поле код
для
сохранения
А за второй заход выделять то, что внутри тэгов
можно еще воспользоваться
http://www.doc.crossplatform.ru/qt/4.5.0/qregexp.html#cap
следующим образом, к примеру:
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));
}
Ошибся. Вот так написал:
QStringList txtList = txt_text->toPlainText().split(QRegExp("<var>.*</var>"));
и вывелось "Введите в поле код "и все
kwisp, это не подходит, потому что этих <pod> может быть сколько угодно.
Можете подсказать регулярные выражения для обоих случаев для выборки простого текста и внутри тегов.
<pod>.*</pod> для первого случая не подходит
Ponter
ты забыл:
ясно.
я пример привел, относительно первого поста. выже не сказали что <pod> может быть сколько угодно.
вам уже http://www.doc.crossplatform.ru/qt/4.6.x/qregexp.html#setMinimal
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);
QRexExp reg("</?pod>");
QStringList strL = str.split(reg);
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)