你好,有必要使用正则表达式从 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同志,灵机一动,还是不知道怎么把header的值拉出来 (比如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
你的例子有几个问题,你解决问题的方法根本不适合它——正则表达式在这里通常是无用的(在大多数情况下)。
因此,首先,您需要知道 string 的长度,
"CONTENT_LENGTH\027\0SCGI..."
由于其中存在零个字符,因此无法计算该长度。我假设这个字符串是从某个地方获取的,从那里你可以得到它的长度。此外,在您提供的示例中,您试图从空字符和数字构造一个字符串,结果是无意义的。如果您认为
"\027"
这是一个由空字符和数字 27 组成的字符串,那么您就错了——这是一个027
八进制数字系统中的数字。老实说,我不知道如何将它写成一行,但我会在下面的示例中向您展示一种解决方法。我的示例基于您的示例,但缩短了长度以便更容易计算字符串长度等。
就是这样,没有正则表达式。您只需要根据我上面给出的想法调整您的实际代码。