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ファイルから何を取得したいですか? これは1つです...

    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

\\内のバックスラッシュに使用する必要があります""

編集:

(){また、内部に逃げる必要はありません[]

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 に答える