Я пытаюсь сопоставить строку формы% foo% в шаблоне. Контекст: Цель состоит в том, чтобы заменить% foo% на значение столбца foo в возврате хранимой процедуры.QRegexp и процент (%) знак
Я не могу заставить его работать. a Начало, которое я назвал кодировкой UTF8 моих шаблонов, было корнем моих проблем. Но даже ниже делает неудачу:
#include <QCoreApplication>
#include <QRegExp>
#include <iostream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString str = "__%foo%____";
std::cout << "with regex: %(.*)%" << std::endl;
QRegExp re("%(.*)%",Qt::CaseInsensitive);
re.indexIn(str);
for(int pos = 0; pos < re.captureCount(); ++pos)
{
std::cout << re.cap(pos).toStdString() << std::endl;
}
std::cout << "with regex: \\%(.*)\\%" << std::endl;
QRegExp re2("\\%(.*)\\%",Qt::CaseInsensitive);
re2.indexIn(str);
for(int pos = 0; pos < re2.captureCount(); ++pos)
{
std::cout << re2.cap(pos).toStdString() << std::endl;
}
std::cout << "with regex: %([^%])%" << std::endl;
QRegExp re3("%([^%])%",Qt::CaseInsensitive);
re3.indexIn(str);
for(int pos = 0; pos < re3.captureCount(); ++pos)
{
std::cout << re3.cap(pos).toStdString() << std::endl;
}
std::cout << "with regex: \\%([^\\%])\\%" << std::endl;
QRegExp re4("\\%([^\\%])\\%",Qt::CaseInsensitive);
re4.indexIn(str);
for(int pos = 0; pos < re4.captureCount(); ++pos)
{
std::cout << re4.cap(pos).toStdString() << std::endl;
}
std::cout << "with regex: \\x25([^\\x25])\\x25" << std::endl;
QRegExp re5("\\x25([^\\x25])\\x25",Qt::CaseInsensitive);
re5.indexIn(str);
for(int pos = 0; pos < re5.captureCount(); ++pos)
{
std::cout << re5.cap(pos).toStdString() << std::endl;
}
std::cout << "with regex: \\%(.*)\\%" << std::endl;
QRegExp re6("\\%(.*)\\%",Qt::CaseInsensitive);
re6.indexIn(str);
for(int pos = 0; pos < re6.captureCount(); ++pos)
{
std::cout << re6.cap(pos).toStdString() << std::endl;
}
return a.exec();
}
Выход:
with regex: %(.*)%
%foo%
with regex: \%(.*)\%
%foo%
with regex: %([^%])%
with regex: \%([^\%])\%
with regex: \x25([^\x25])\x25
with regex: \%(.*)\%
%foo%
Я только хочу, чтобы захватить Foo, а не '%'
Удалите ответ с вашего вопроса и поместите его правильно ниже в разделе ответов. – HamZa
Ну, в прошлый раз люди просили меня сделать обратное: D Но хорошо, я оставлю оба. –
nonesense. Ответ не является вопросом, поэтому вопрос не должен содержать ответа. Кстати, через некоторое время вы можете принять свой собственный ответ. – HamZa