2016-05-11 4 views
1

Как я могу разделить QString персонажем, например: '+' и не разделиться, если этот символ сбежал: '\+'?Как избежать разделителя при разделении QString?

Спасибо!

В соответствии с просьбой, некоторые более подробно:

Строка для разделения: "a+\+"

Разделитель: '+'

Нужный выход: "a", "+"

+1

While ' "\\ + (<\\\\?!)"' будет ш ork в большинстве случаев, он все равно будет терпеть неудачу в некоторых (когда '+' предшествует литерал '' \ ''). –

+0

Не могли бы вы поделиться кодом, который у вас есть? –

+0

Добавлен ввод и вывод, который я бы хотел достичь. Надеюсь, это поможет. – tobilocker

ответ

1

Вы хотите использовать globalMatch с регулярным выражением для разделения, которое выбирает все, кроме неэкспериментированного '+':

(?:[^\\\+]|\\.)* 

Live Example

Так дали QString foo вы можете перемещаться по списку с помощью QRegularExpressionMatchIterator:

QRegularExpression bar("((?:[^\\\\\\+]|\\\\.)*)"); 
auto it = bar.globalMatch(foo); 

while(it.hasNext()){ 
    cout << it.next().captured(1).toStdString() << endl; 
} 

В C++ 11 вы можете также использовать cregex_token_iterator:

regex bar("((?:[^\\\\\\+]|\\\\.)+)"); 
copy(cregex_token_iterator(foo.cbegin(), foo.cend(), bar, 1), cregex_token_iterator(), ostream_iterator<string>(cout, "\n")); 

Live Exampe


В прискорбном случае, если у вас нет ни Qt5, ни C++ 11, ни подталкивание, вы можете использовать QRegExp:

QRegExp bar("((?:[^\\\\\\+]|\\\\.)*)"); 

for(int it = bar.indexIn(foo, 0); it >= 0; it = bar.indexIn(foo, it)) { 
    cout << bar.cap(1).toStdString() << endl; 
} 
+0

Это также должно работать с Qt4 и с использованием класса 'QRegExp' вместо' QRegularExpression' или? Потому что это оставляет меня с '++' при расщеплении 'foo + \ +' и '+' при расщеплении 'foo + bar', когда это должно быть' foo, + 'и' foo, bar' – tobilocker

+0

@tobilocker. Какая команда вы ' re, потому что это должно работать с 'QRegExp'. –

+0

Значения 'QString':' 'EXPRESSION + \ +" 'и spliiting выполняются с помощью:' QStringList valuesList = values.split (QRegExp ("(?: [^ \\\\\\ +] | \\\\ .] * "), QString :: SkipEmptyParts) ;. И я получаю:' "+" ' – tobilocker

 Смежные вопросы

  • Нет связанных вопросов^_^