0

次の形式のテキストがあります。

{{st1:[[word1]]-[[word2]]s [[word1]] [[word3]]}} {{st2:[[word2]] [[word3]] [[word1]]-[[word4]]s.}}

{{st[0-9]: }}指定された単語 (署名) を含む文 (署名) を除外したい[[word]]。したがって、 を検索している[[word1]]場合、出力は次のようになります。

{{st1:[[word1]]-[[word2]]s [[word1]] [[word3]]}} 
{{st2:[[word2]] [[word3]] [[word1]]-[[word4]]s.}} 

を検索している場合[[word4]]、出力は

{{st2:[[word2]] [[word3]] [[word1]]-[[word4]]s.}}

これまでに次のコードを作成しましたが、上記を達成できません。修正するのを手伝ってください。

NSString* aString = @"{{st1:[[word1]]-[[word2]]s [[word1]] [[word3]]}} {{st2:[[word2]] [[word3]] [[word1]]-[[word4]]s.}}";
NSString *regexString   = @"\\{\\{st[1-9]:.*(word).*\\}\\}";
for(NSString *match in [aString componentsMatchedByRegex:regexString])
    NSLog(@"%@", match);

私は RegexKitLite を使用していますが、他の提案は受け付けています。

4

1 に答える 1

0

現在の正規表現の問題は、が文末の.*と一致することです。正規表現の内部部分が を超えて進まないようにする必要があります。これを行う 1 つの方法を次に示します。}}}}

\\{\\{st[1-9]:[^}]*(word)[^}]*\\}\\}

単一の右中括弧が単語の一部として有効な文字である場合、もう少し複雑になりますが、[^}]*(\}?[^}])*またはに置き換えることができるはず(?:(?!\}\}).)*です。

于 2012-09-25T14:58:36.787 に答える