Qt / QRegExp括号和换行的正则表达式或“\ r”?

时间:2013-03-13 17:57:47

标签: c++ regex qt

我对使用Qt QRegExp捕获文本感到困惑。我想从PHP代码中获取数据很简单:

    public function asr($x)
    {
            echo "index";
    }

说明:

    public function <can be more spaces or new lines...> asr($x) <can be more spaces or/and new lines or/and tabs...>
    {
            echo "index";
    }

我想从PHP文件中获取什么?这是一个......

    public function asr($x)
    {

我现在如何被抓住?

    QRegExp reg("(public|private|protected|static|final)(.*)function(.*)[\(](.*)[\)](.*)[\n](.*)‌​[\{]", Qt::CaseInsensitive);

说明:

当我尝试添加[\{](\{)从PHP文件中获取大括号时,它不会获取数据:

仅限结果:

    public function asr($x)

相反:

    public function asr($x) {

注意:($x){之间可以是换行符\n,也可以是\s

这将是(\))(\n|\s),但没有运气:(

使用示例代码解析结果:

    if (file.open(QIODevice::ReadOnly))
    {
        QTextStream in(&file);

        // regex for function with new line
        QRegExp reg("((.*)public|private|protected|static|final)( *)function(.*)[(](.*)", Qt::CaseInsensitive);

        // capture to list
        QStringList list = reg.capturedTexts();

        qDebug() << list;

        while ( !in.atEnd() )
        {

            QString line_read = in.readLine();

            //qDebug() << line_read;        // read lines

            qDebug() << reg.exactMatch(line_read);  // find matches
        }
    }
    }


FINAL RESULTS:

false 
false 
false 
false 
false 
false 
false 
false 
true        // means found on this line for QRegExp policies
false 
false 
false 
false 
true 
false 
false 
false 
false 
true 
false 
false 
false 
false 
true 
false 
false 
false 
false 
false 
false 
false 

2 个答案:

答案 0 :(得分:1)

您必须在\\内使用""作为反斜杠。

编辑:

您也不必在(){

内逃避[]
QRegExp function("(public|private|protected|static|final)( *)function(.*)[(](.*)[)](.*)[{]", Qt::CaseInsensitive);
auto b = function.exactMatch( "public function ($d) \n {" );
b = function.exactMatch( "public function ($d){" );

适合我。空格由(.*)

消耗

答案 1 :(得分:0)

我知道什么是问题,逐行读取而不是文件中的所有行,然后应该替换文件中的文本。我不应该使用in.readLine()来阅读文件,所以我在这一行找到了{,但因为大括号{在下一行而不存在!