2016-05-18 4 views
2

誰でも助けてくれますか?Qtの正規表現を使って2つのタグ間の文字列を見つけよう

私はN個の部分文字列を含む文字列をタグで区切り、すべての部分文字列を取得する必要があります。 !文字列が

STARTfoo barENDSTARThiのようなものですENDSTARTstackoverflowrulezEND

私は開始/終了タグの間のすべての文字列を取得したいと思い、私は運で正規表現のカップルと試してみました:

(START)(。*)(END)がALL(END)(+ W \)最初と最後のタグ

(START)の間の競合を私に与えてくれ何の結果を与えない

コードは非常に簡単です:

QString l_str "STARTfoo barENDSTARThi there!ENDSTARTstackoverflowrulezEND"; 
QRegExp rx("(START)(\w+)(END)"); 
QStringList list; 
int pos = 0; 
while ((pos = rx.indexIn(l_str, pos)) != -1) 
{ 
    list << rx.cap(1); 
    pos += rx.matchedLength(); 
} 
qWarning() << list; 

私のような結果のリストたい:

STARTfoo barEND

がSTARThi END

STARTstackoverflowrulezEND

を!

助けが必要ですか?

ありがとうございます! .*

+0

'QRegex'は' START(。*?)END'のような非貪欲な要素を受け入れますか? – Galik

+0

@Galik:いいえ、「QRegularExpression」があります。 –

答えて

1

使用rx.setMinimal(true)それは怠惰にする:

QRegExp rx("START.*END"); 
rx.setMinimal(true); 

QRegExp::setMinimal docsを参照してください:

は、最小限のマッチングを有効または無効にします。 最小値がの場合はfalseとなり、デフォルトではグリーディ(最大)になります。

+0

ちょうど注記:私はキャプチャグループ(すべて '()')を削除することを提案しているので、 'rx.cap(0);'でマッチ値にアクセスするだけです。 –

関連する問題