テキストの開始と終了を検索するために使用する 2 つの QRegExp オブジェクトがあります。私のコードは次のようになります。
// strText defined earlier
QRegExp start(...);
QRegExp end(...);
int iStart = start.indexIn(strText);
int iEnd = end.indexIn(strText, iStart) + end.matchedLength();
このコードに関して 2 つの質問があります。
(1) 各正規表現が探しているテキストが見つかったと仮定します。上記のコードを呼び出すと、実行時に次のエラーが発生します。
TerminalWindow.exe の 0x66b48b3f で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000004。
コードを次のように変更すると、同じエラーが発生します。
int iStart = start.indexIn(strText);
int iTemp = end.matchedLength();
int iEnd = start.indexIn(strText, iStart) + iTemp;
内部で MatchedLength() がまだ割り当てられていないオブジェクトに対して実行されている可能性があるため、この 2 番目のコード スニペットのエラーは私には理にかなっています。ただし、最初のコード スニペットからも同じエラーが発生する理由がわかりません。他のすべてが等しい場合、操作の順序は左から右ではありませんか? コードを次のように変更すると、期待どおりの結果が得られます。
// strText defined earlier
QRegExp start(...);
QRegExp end(...);
int iStart = start.indexIn(strText);
int iEnd = end.indexIn(strText, iStart);
iEnd += end.matchedLength();
(2) 私の例の strText が次のようになっている場合:
<start>
stackoverflow is awesome!
</start>
<start>
I like cake!
</start>
<start>
Girls are pretty!
</start>
各開始要素の内容をキャプチャする Qt RegExp を作成するにはどうすればよいですか? 何かのようなもの:
QRegExp reg("<start>(.*?)</start>");
POSIX正規表現(Qtが実装していると私が信じているもの)で動作するはずですが、私にとっては決して機能しません。(注: これを行う理想的な方法は、XML/HTML パーサー (実際には HTML を解析しています) を使用することですが、現在、正規表現ソリューションに興味があります)。
ありがとうございました!