0
NSString *myText = @"mary had a little lamb";
NSString *regexString = @"mary(.*?)little";

for(NSString *match in [myText captureComponentsMatchedByRegex:regexString]){

NSLog(@"%@",match);

}

これにより、コンソールに次の2つが出力されます。

1)「メアリーは少し持っていた」2)「持っていた」

私が欲しいのは、「持っていた」情報の2番目のビットだけです。文字列を照合して内部だけを返す方法はありますか?

私はObjectiveCにかなり慣れていません。これはかなり些細な質問ですが、forループで整数をインクリメントし、2回目の反復で「hada」をNSStringに格納するよりも厄介な方法を見つけることができません。 。

4

2 に答える 2

3

正規表現では、最初に返される一致は一致した文字列全体( "mary had a little")であり、次の項目はキャプチャされたグループ( "had a")であることが標準です。

-captureComponentsMatchedByRegex:一致のaを返しますNSArray。したがって、2番目のアイテム、または最初にキャプチャされたグループが必要な場合は、次のようになります。

NSString *match = [[myText captureComponentsMatchedByRegex:regexString] objectAtIndex:1]
于 2010-06-10T17:20:50.237 に答える
1

captureComponentsMatchedByRegex:正規表現の最初の一致のすべてのキャプチャを返します。配列インデックス(別名キャプチャ)0は、「正規表現に一致するすべてのテキスト」です。正規表現に追加のキャプチャグループが含まれている場合、正規表現のように、それらの配列インデックスは1から始まり、正規表現に存在するキャプチャグループの数だけ継続します。

おそらくあなたが望むのはcomponentsMatchedByRegex:capture:方法です。このメソッドは、送信先の文字列内のすべての一致の配列を返し、さらに、結果の配列を作成するために使用されるキャプチャグループを指定できます。例えば:

NSString *myText = @"mary had a little lamb";
NSString *regexString = @"mary(.*?)little";

for(NSString *match in [myText componentsMatchedByRegex:regexString capture:1L]) {
  NSLog(@"%@",match);
}

上記はちょうどを印刷し" had a "ます。

于 2010-06-10T18:15:26.287 に答える