2011-01-20 3 views
4

iphoneの正規表現で少しキックスタートが必要です。 は基本的に私は、私は今、NSDateプロパティと-say- NSStringのプロパティを持つオブジェクトにそれを解析する
*185 BC: SOME EVENT HERE
*2001: SOME OTHER EVENT MUCH LATERiphoneのNSRegularExpressionとキャプチャグループ

の形で民間のMediaWikiでの日付のリストを持っています。 は、私がこれまでにこれを持っている:(rawContentStringページのMediaWikiの構文が含まれています)

NSString* regexString [email protected]"\\*(*[0-9]{1,}.*): (.*)"; 
NSRegularExpressionOptions options = NSRegularExpressionCaseInsensitive; 
NSError* error = NULL; 

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:regexString options:options error:&error]; 
if (error) { 
    NSLog(@"%@", [error description]); 
} 

NSArray* results = [regex matchesInString:rawContentString options:0 range:NSMakeRange(0, [rawContentString length])]; 
for (NSTextCheckingResult* result in results) { 

    NSString* resultString = [rawContentString substringWithRange:result.range]; 
    NSLog(@"%@",resultString); 
} 

、残念ながら私は正規表現が、私は願って、私はマッチした日付とテキストをキャプチャする方法を知らない道を働いていないと思います。 助けがあれば助かります。 BTW:MediaWiki用の正規表現パターンのコンパイルはありませんどこかで構文がありますか?

\*([ 0-9]{1,}.*):(.*) 

はあなたが必要なものに、より良い動作するはずです:正規表現についてはハイコ *

+0

i「があれば、私はhttp://regexkit.sourceforge.net/を使用したいですあなたよ。それは私の経験ではるかに良く機能し、通常は必要なものを手に入れます。 – LordT

+0

こんにちは、チップのおかげで。私はそれを調べた。しかし、私のアプリは4.0+でしか動かないので、私はIOSの正規表現のfuntionalityと一緒に行く方が良いと思った。そうじゃないの? – HeikoG

+0

AFAIK彼らは基本的に同じことを使用していますが、regexkitは使用するほうがはるかにいいようです - しかし、それは本当に個人的な好みだと思います。しかし、他の人がそれについてもっと知っているかもしれません。 – LordT

答えて

2

事前 で

おかげで、私はこれらの線の周りに何かを考えます。あなたは最初の*をエスケープしていません、なぜ最初のグループのステートメントに*がありますか?

+0

ちょっと、ありがとう - 最初のグループの*については、もっとクリーンな感じ:-):私は '*'と日付の間にスペースを用意したいと思っていました。 – HeikoG

+0

それは意味がありますが、それは '*'ではなく、 '*' – LordT

+0

です:-)私は他の正規表現で同じことをしています。だからあなたは私のためにいくつかの問題を解決しました...ありがとう – HeikoG

2

私の問題は、私がmatchesInStringを使用していたことと、を使用する必要がありました.1つのNSTextCheckingResultに複数の範囲が返されるためです。

これは直感的ですが、機能しました。

私はhttp://snipplr.com/view/63340/

マイコード(クレジットカードのトラックデータを解析するために)からの回答を得ました:

NSRegularExpression *track1Pattern = [NSRegularExpression regularExpressionWithPattern:@"%.(.+?)\\^(.+?)\\^([0-9]{2})([0-9]{2}).+?\\?." options:NSRegularExpressionCaseInsensitive error:&error]; 

NSTextCheckingResult *result = [track1Pattern firstMatchInString:trackString options:NSMatchingReportCompletion range:NSMakeRange(0, trackString.length)]; 

self.cardNumber = [trackString substringWithRange: [result rangeAtIndex:1]]; 
self.cardHolderName = [trackString substringWithRange: [result rangeAtIndex:2]]; 
self.expirationMonth = [trackString substringWithRange: [result rangeAtIndex:3]]; 
self.expirationYear = [trackString substringWithRange: [result rangeAtIndex:4]]; 
+0

私に 'rangeAtIndex:'を思い出させてくれてありがとう – user3099609

関連する問題