Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QRegExp未按预期提取文本_Regex_Qt_Qregexp - Fatal编程技术网

QRegExp未按预期提取文本

QRegExp未按预期提取文本,regex,qt,qregexp,Regex,Qt,Qregexp,我试图从一行文本的方括号中提取文本。我和正则表达式混在一起已经有一段时间了,我不能得到我需要的东西。(我甚至无法解释为什么输出是这样)。代码如下: QRegExp rx_timestamp("\[(.*?)\]"); int pos = rx_timestamp.indexIn(line); if (pos > -1) { qDebug() << "Captured texts: " << rx_timestamp.capturedTexts();

我试图从一行文本的方括号中提取文本。我和正则表达式混在一起已经有一段时间了,我不能得到我需要的东西。(我甚至无法解释为什么输出是这样)。代码如下:

QRegExp rx_timestamp("\[(.*?)\]");
int pos = rx_timestamp.indexIn(line);
if (pos > -1) {
    qDebug() << "Captured texts: " << rx_timestamp.capturedTexts();
    qDebug() << "timestamp cap: " <<rx_timestamp.cap(0);
    qDebug() << "timestamp cap: " <<rx_timestamp.cap(1);
    qDebug() << "timestamp cap: " <<rx_timestamp.cap(2);
} else qDebug() << "No indexin";
  • 有人能解释一下发生了什么事吗?为什么在方括号之间不存在这样的字符时,cap返回“.”
  • 有人能纠正正则表达式,从方括号中提取时间戳吗

  • 你错过了两件事。转义反斜杠,并使用
    setMinimal
    。见下文

    QString line = "messages:[2013-10-08 09:13:41] NOTICE[2366] chan_sip.c: Registration from '\"xx000 <sip:xx000@183.229.164.42:5060>' failed for '192.187.100.170' - No matching peer found";
    
    QRegExp rx_timestamp("\\[(.*)\\]");
    rx_timestamp.setMinimal(true);
    int pos = rx_timestamp.indexIn(line);
    if (pos > -1) {
        qDebug() << "Captured texts: " << rx_timestamp.capturedTexts();
        qDebug() << "timestamp cap: " <<rx_timestamp.cap(0);
        qDebug() << "timestamp cap: " <<rx_timestamp.cap(1);
        qDebug() << "timestamp cap: " <<rx_timestamp.cap(2);
    } else qDebug() << "No indexin";
    
    更新:发生了什么:

    C++源代码中的反斜杠表示下一个字符是转义字符,如<代码> \n。要在正则表达式中显示反斜杠,您必须像这样转义反斜杠:

    \\
    ,这将使正则表达式引擎看到
    \
    ,就像Ruby、Perl或Python使用的那样

    方括号也应该转义,因为它们通常用于表示正则表达式中的元素范围

    因此,要让正则表达式引擎看到方括号字符,需要发送它

    \[
    
    < >但是C++源文件不能将<代码> \/COD>字符放入一个没有两行的字符串中,因此它变成了

    \\[
    
    在学习正则表达式时,我喜欢使用这个。页面右侧有一个独特代码和字符列表

    QRegEx
    与regex不完全匹配。如果你研究文档,你会发现很多小东西。比如它是如何做到贪婪的。惰性匹配

    就我在正则表达式解析器中看到的情况而言,捕获是如何列出的是非常典型的。捕获列表首先列出所有捕获组,然后列出第一个捕获组(或第一组括号中包含的内容)

    要查找更多匹配项,必须迭代调用
    indexIn


    希望这能有所帮助。

    您缺少两件事。请跳过反斜杠,然后使用
    setMinimal
    。请参见下文

    QString line = "messages:[2013-10-08 09:13:41] NOTICE[2366] chan_sip.c: Registration from '\"xx000 <sip:xx000@183.229.164.42:5060>' failed for '192.187.100.170' - No matching peer found";
    
    QRegExp rx_timestamp("\\[(.*)\\]");
    rx_timestamp.setMinimal(true);
    int pos = rx_timestamp.indexIn(line);
    if (pos > -1) {
        qDebug() << "Captured texts: " << rx_timestamp.capturedTexts();
        qDebug() << "timestamp cap: " <<rx_timestamp.cap(0);
        qDebug() << "timestamp cap: " <<rx_timestamp.cap(1);
        qDebug() << "timestamp cap: " <<rx_timestamp.cap(2);
    } else qDebug() << "No indexin";
    
    更新:发生了什么:

    <> P>一个C++源代码中的反斜杠表示下一个字符是一个转义字符,如<代码> \n>代码>。要在正则表达式中显示反斜杠,必须避免像这样的反斜杠:<代码> \\代码>,这样它就可以使正则表达式引擎看到<代码> \/>代码,就像露比、perl或Python所使用的一样。p> 方括号也应该转义,因为它们通常用于表示正则表达式中的元素范围

    因此,要让正则表达式引擎看到方括号字符,需要发送它

    \[
    
    < >但是C++源文件不能将<代码> \/COD>字符放入一个没有两行的字符串中,因此它变成了

    \\[
    
    在学习正则表达式时,我喜欢使用它。它在页面右侧有一个独特代码和字符列表

    QRegEx
    与regex不完全匹配。如果你研究文档,你会发现很多小东西,比如它是如何进行贪婪与懒惰匹配的

    就我在正则表达式解析器中所见,捕获列表是非常典型的。捕获列表首先列出了所有捕获,然后列出了第一个捕获组(或者第一组括号中包含的内容)

    要查找更多匹配项,必须迭代调用
    indexIn


    希望这能有所帮助。

    您缺少两件事。请跳过反斜杠,然后使用
    setMinimal
    。请参见下文

    QString line = "messages:[2013-10-08 09:13:41] NOTICE[2366] chan_sip.c: Registration from '\"xx000 <sip:xx000@183.229.164.42:5060>' failed for '192.187.100.170' - No matching peer found";
    
    QRegExp rx_timestamp("\\[(.*)\\]");
    rx_timestamp.setMinimal(true);
    int pos = rx_timestamp.indexIn(line);
    if (pos > -1) {
        qDebug() << "Captured texts: " << rx_timestamp.capturedTexts();
        qDebug() << "timestamp cap: " <<rx_timestamp.cap(0);
        qDebug() << "timestamp cap: " <<rx_timestamp.cap(1);
        qDebug() << "timestamp cap: " <<rx_timestamp.cap(2);
    } else qDebug() << "No indexin";
    
    更新:发生了什么:

    <> P>一个C++源代码中的反斜杠表示下一个字符是一个转义字符,如<代码> \n>代码>。要在正则表达式中显示反斜杠,必须避免像这样的反斜杠:<代码> \\代码>,这样它就可以使正则表达式引擎看到<代码> \/>代码,就像露比、perl或Python所使用的一样。p> 方括号也应该转义,因为它们通常用于表示正则表达式中的元素范围

    因此,要让正则表达式引擎看到方括号字符,需要发送它

    \[
    
    < >但是C++源文件不能将<代码> \/COD>字符放入一个没有两行的字符串中,因此它变成了

    \\[
    
    在学习正则表达式时,我喜欢使用它。它在页面右侧有一个独特代码和字符列表

    QRegEx
    与regex不完全匹配。如果你研究文档,你会发现很多小东西,比如它是如何进行贪婪与懒惰匹配的

    就我在正则表达式解析器中所见,捕获列表是非常典型的。捕获列表首先列出了所有捕获,然后列出了第一个捕获组(或者第一组括号中包含的内容)

    要查找更多匹配项,必须迭代调用
    indexIn


    希望这能有所帮助。

    您缺少两件事。请跳过反斜杠,然后使用
    setMinimal
    。请参见下文

    QString line = "messages:[2013-10-08 09:13:41] NOTICE[2366] chan_sip.c: Registration from '\"xx000 <sip:xx000@183.229.164.42:5060>' failed for '192.187.100.170' - No matching peer found";
    
    QRegExp rx_timestamp("\\[(.*)\\]");
    rx_timestamp.setMinimal(true);
    int pos = rx_timestamp.indexIn(line);
    if (pos > -1) {
        qDebug() << "Captured texts: " << rx_timestamp.capturedTexts();
        qDebug() << "timestamp cap: " <<rx_timestamp.cap(0);
        qDebug() << "timestamp cap: " <<rx_timestamp.cap(1);
        qDebug() << "timestamp cap: " <<rx_timestamp.cap(2);
    } else qDebug() << "No indexin";
    
    更新:发生了什么:

    <> P>一个C++源代码中的反斜杠表示下一个字符是一个转义字符,如<代码> \n>代码>。要在正则表达式中显示反斜杠,必须避免像这样的反斜杠:<代码> \\代码>,这样它就可以使正则表达式引擎看到<代码> \/>代码,就像露比、perl或Python所使用的一样。p> 方括号也应该转义,因为它们通常用于表示正则表达式中的元素范围

    因此,要让正则表达式引擎看到方括号字符,需要发送它

    \[
    
    < >但是C++源文件不能将<代码> \/COD>字符放入一个没有两行的字符串中,因此它变成了

    \\[
    
    在学习正则表达式时,我喜欢使用它。它在页面右侧有一个独特代码和字符列表