Russian Qt Forum
Ноябрь 25, 2024, 07:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Заморочка с QRegExp'ами  (Прочитано 4128 раз)
blood_shadow
Гость
« : Май 20, 2011, 16:34 »

Добрый день,
кто может объяснить почему данный код не работает:
Код
C++ (Qt)
QString string("filename=\"arhi1.rar\"");
QRegExp onlyName_reg("([a-zA-Z\\d._]*)(?=\")");
 
int pos = QString("filename").length() + 1;
if ((pos = onlyName_reg.indexIn(string, pos)) != -1)
{
   QString fileName =
           onlyName_reg.cap();
 
   qDebug() << "File name -> " << fileName;
 
}
 

а этот работает:
Код
C++ (Qt)
QString string("filename=\"arhi1.rar\n");
QRegExp onlyName_reg("([a-zA-Z\\d._]*)(?=\n)");
 
int pos = QString("filename").length() + 1;
if ((pos = onlyName_reg.indexIn(string, pos)) != -1)
{
   QString fileName =
           onlyName_reg.cap();
 
   qDebug() << "File name -> " << fileName;
 
}
 

Первый выводит пустую строку, а второй arhi1.rar, как-то повидимому неправильно обрабатывается
\"
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Май 20, 2011, 17:14 »

пробовал эскейпить кавычку (в смысле реальную кавычку)?
Код
C++ (Qt)
QString string("filename=\\\"arhi1.rar\\\"");
QRegExp onlyName_reg("([a-zA-Z\\d._]*)(?=\\\")"); // возможно тут тоже нужно
« Последнее редактирование: Май 20, 2011, 17:20 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
blood_shadow
Гость
« Ответ #2 : Май 20, 2011, 17:26 »

пробовал эскейпить кавычку (в смысле реальную кавычку)?
только что попробовал три разных варианта с \\\" - результат тот же...
наверно это баг или есть какая-то не очевидная тонкость
Записан
zenden
Гость
« Ответ #3 : Май 20, 2011, 17:30 »

Это не баг, вместо * используйте +

Код
C++ (Qt)
QRegExp onlyName_reg("([a-zA-Z\\d._]+)(?=\")");
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Май 20, 2011, 17:34 »

а ведь действительно. мне почему-то показалось, что поиск начинается не с начальной кавычки, а с первой буквы имени файла (уже за этой кавычкой) - тогда б указанное в первом посте решение работало.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
blood_shadow
Гость
« Ответ #5 : Май 20, 2011, 17:40 »

Это не баг, вместо * используйте +

Код
C++ (Qt)
QRegExp onlyName_reg("([a-zA-Z\\d._]+)(?=\")");
понял, в чем хитрость, спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.145 секунд. Запросов: 22.