0

例:

QFile controller_selected_file(loaded_file);

if (controller_selected_file.open(QIODevice::ReadOnly))
{
    // grab a data
    QTextStream in(&controller_selected_file);

    // read all
    QString read_data = in.readAll();

    // Regex for match function "public function something()"
    QRegExp reg("(static|public|final)(.*)function(.*)[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]", Qt::CaseInsensitive);

    // Read by regex and file
    reg.indexIn(read_data);

    QStringList data_render = reg.capturedTexts();

    qDebug() << data_render;

    qDebug() << data_render[0];
    qDebug() << data_render[1];
    qDebug() << data_render[3];

    // ...
}

public function somefunction()ファイル内のすべての場所と別の場所にあるファイルを取得したいのですが、ファイル文字列全体を受け取るか、最初の配列public function something($a,$b = "example")だけを受け取ります。public

したがって、配列として表示されるすべてのデータを取得したい:

public function somefunction().

簡単に言えば、ファイル内のすべての関数名を解析します。

QRegexp 式での正規表現の全機能:

(static|public|final)(.*)function(.*)[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]

編集:PHPファイルの文字列に表示されるすべてを取得したい。正規表現で定義された文字列ではなく、ファイル内のすべての文字列を受け取ると、問題が発生します。

敬意をありがとう!

4

1 に答える 1

0

あなたの質問が正しいと理解したら、正規表現を次のように変更する必要があると思いますQRegExp reg( "((static|public|final).*function.*\([\\w\\s,]*\))" );

上記の正規表現を使用すると、次のようなものに一致させることができますstatic function newFunc( int gen_x, float A_b_c )

QFile controller_selected_file(loaded_file);

if (controller_selected_file.open(QIODevice::ReadOnly)) {
    // grab a data
    QTextStream in(&controller_selected_file);

    // read all
    QString read_data = in.readAll();

    // Regex for match function "public function something()"
    QRegExp reg( "((static|public|final).*function.*\([\\w\\s,]*\))" );

    // Read by regex and file
    qDebug() << reg.indexIn( read_data );
    qDebug() << reg.cap( 1 );
    // ...
}

read_data次のテキストが含まれていると言う

"This is some text: static function newFunc( int generic, float special )
And it also contains some other text, but that is not important"

次に、出力は次のようになります

19
"static function newFunc( int generic, float special )"

これがあなたの望むものであることを願っています。

于 2013-03-28T14:20:56.537 に答える