здравствуйте, необходимо выдрать из запроса scgi все заголовки и их значения через регулярки... запрос:
CONTENT_LENGTH\027\0SCGI\01\0REQUEST_METHOD\0POST\0REQUEST_URI\0/deepthought\0,What is the answer to life?
вся проблема в терминальном нуле... уж что только не пробовал: "(\0[a-zA-Z_/]+\0)", вообще даже просто числа не находит "(\\d+)"
сам код:
auto f = QString("CONTENT_LENGTH\027\0SCGI\01\0REQUEST_METHOD\0POST\0REQUEST_URI\0/deepthought\0,What is the answer to life?");
QRegExp rx("(/\x00/\\d+)"); // сюда много чего перепробовал
int pos1{0}; QStringList list1;
while ((pos1 = rx.indexIn(f, pos1)) != -1) {
list1 << rx.cap(1);
pos1 += rx.matchedLength();
}
std::cout << list1.join(",").toStdString() << std::endl;
товарищ Abyx, натолкнул на мысль, однако так и не знаю как вытащить значения заголовков(например 27), после этого:
f = QString::fromLocal8Bit("CONTENT_LENGTH\027\0SCGI\01\0REQUEST_METHOD\0POST\0REQUEST_URI\0/deepthought\0,What is the answer to life?"
, 96);
QRegExp rx("(\\x00*[a-zA-Z_/]+)");
выводится следующее:
CONTENT_LENGTH,SCGI,REQUEST_METHOD,POST,REQUEST_URI,/deepthought,What,is,the,answer,to,life
С Вашим примером есть несколько проблем, а метод, которым Вы решили задачу решать, ей совершенно не подходит — регулярные выражения здесь вообще ни к чему (как и в большинстве случаев).
Итак, первое, Вам нужно знать длину строки "CONTENT_LENGTH\027\0SCGI..."
, которую вычислить не получится из-за наличия нуль символов в оной. Я предполагаю, что строка эта откуда-то берётся и оттуда можно получить её длину.
Дальше, в примере, который Вами представлен, Вы пытаетесь сконструировать строку из нуль-символов и чисел, а в результате получается ерунда. Если Вы думаете, что "\027"
, это строка состоящая из нуль-символа и числа 27, то Вы заблуждаетесь,— это число 027
в восьмеричной системе счисления. Честно говоря, я не знаю, как это записать одной строкой, но обходной путь покажу в примере ниже.
Мой пример составлен на основе Вашего, но сокращён, чтобы упростить вычисление длины строки и прочее.
auto request = QByteArray("CONTENT_LENGTH\0""27\0""SCGI\0""1", 25);
auto list = request.split('\0');
// Удалим пустой элемент, появившийся из-за закрывающего нуль-символа в C-строке
list.removeLast();
for(size_t i = 0; i < list.size(); i += 2)
qDebug() << list[i] << " = " << list[i + 1];
И всё, никаких регулярных выражений. Вам остаётся только адаптировать Ваш реальный код, под идею, что я привёл выше.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Пишу программуУсловие: вывести те слова из строки у которых гласные и согласные чередуются
Здравствуйте! Такая ситуацияПрограмма для подсчета зарплат сотрудникам
Как сделать так, чтобы переменная number в цикле оставляла свое значение, которое будет введено с клавиатуры?