0

次の形式で URL を解析する必要があります。

http://www.example.com/?method=example.method&firstKey=firstValue&id=1893736&thirdKey=thirdValue

必要なのは&id=1893736内の1893736の値だけです。

私の iPhone プロジェクトでは、Objective-C で解析を行う必要があります。正規表現と関係があるに違いないことを理解しています。しかし、私はそれを行う方法がわかりません。

任意の提案をいただければ幸いです。:)

4

4 に答える 4

1

このための正規表現は必要ありません。あなたはこのようなことを試すことができます

NSString *url = @"http://www.example.com/?method=example.method&firstKey=firstValue&id=1893736&thirdKey=thirdValue";

NSString *identifier = nil;

for (NSString *arg in [[[url pathComponents] lastObject] componentsSeparatedByString:@"&"]) {
  if ([arg hasPrefix:@"id="]) {
    identifier = [arg stringByReplacingOccurrencesOfString:@"id=" withString:@""];
  }
}

NSLog(@"%@", identifier);
于 2012-08-28T14:19:06.083 に答える
1

正規表現は使用しないでください。NSURLクエリ文字列を確実に抽出し、この回答のコードを使用してクエリ文字列を解析するために使用します。

于 2012-08-28T14:34:50.733 に答える
1

これを使用します:

.*/\?(?:\w*=[^&]*&)*?(?:id=([^&]*))(?:&\w*=[^&]*)*

そして、最初のグループをつかみます: \1. が得られ1893736ます。

簡略化

idが数字のみで構成される場合:

.*/\?(?:\w*=[^&]*&)*?(?:id=(\d*))(?:&\w*=[^&]*)*

興味のないグループをキャプチャすることを気にしない場合 (この場合はorを使用 ):\3id

.*/\?(\w*=.*?&)*?(id=(?<id>\d*))(&\w*=.*)*

より単純なバージョン ( を使用\3):

.*/\?(.*?=.*?&)*(id=(\d*))(&.*?=.*)*
于 2012-08-28T14:22:15.490 に答える
0

正規表現を使用する代わりに、NSURL インスタンスの文字列表現を分割できます。あなたの場合、文字列をアパーサンド (&) で分割し、配列をループしてプレフィックス (id=) を探し、インデックス 2 (= が終了する場所) から部分文字列を取得できます。

于 2012-08-28T14:17:19.667 に答える