0

我对使用 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 
4

2 回答 2

1

您必须在a 中使用\\反斜杠""

编辑:

你也不必(){在一个[]

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

为我工作。空白被消耗(.*)

于 2013-03-13T18:04:22.723 回答
0

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

于 2013-03-13T18:25:15.843 回答