Qtでは、文字列の一致を正規表現のキャプチャに置き換えるために必要なコードの量が最も少ないのは何ですか?

アキバ

QStringがこれを可能にすることを望んでいました:

QString myString("School is LameCoolLame and LameRadLame");
myString.replace(QRegularExpression("Lame(.+?)Lame"),"\1");

去る

"School is Cool and Rad"

私がドキュメントで見たものからではなく、これを行うことはあなたに(ドキュメントから)行うことを要求するはるかに複雑です:

QRegularExpression re("\\d\\d \\w+");
QRegularExpressionMatch match = re.match("abc123 def");
if (match.hasMatch()) {
    QString matched = match.captured(0); // matched == "23 def"
    // ...
}

または私の場合は次のようなものです:

QString myString("School is LameCoolLame and LameRadLame");
QRegularExpression re("Lame(.+?)Lame");
QRegularExpressionMatch match = re.match(myString);
if (match.hasMatch()) {
    for (int i = 0; i < myString.count(re); i++) {
        QString newString(match.captured(i));
        myString.replace(myString.indexOf(re),re.pattern().size, match.captured(i));
    }
}

そして、それはうまくいかないようです(私は実際に諦めました)。より簡単で便利な方法があるはずです。単純さとコードの可読性のために、これを実現するためにコードの行数を最小限に抑える方法を知りたいと思います。

ありがとう。

おっす
QString myString("School is LameCoolLame and LameRadLame");
myString.replace(QRegularExpression("Lame(.+?)Lame"),"\\1");

上記のコードは期待どおりに機能します。あなたのバージョンでは、エスケープ文字自体をエスケープするのを忘れていました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ