Regexkit lite и разбор iPhone - PullRequest
       13

Regexkit lite и разбор iPhone

2 голосов
/ 08 июля 2009

Я воспользовался предложением некоторых постов, которые рекомендуют regexkit lite, с проблемой, с которой я столкнулся при попытке извлечь конкретный URL из строки. Проблема в том, что я очень потерян с синтаксисом его использования и надеюсь, что кто-то, кто его использовал, может мне помочь.

Строка, которую я пытаюсь разобрать, выглядит примерно так:

<a> blah blah blah <img src="http://www.something.com/1234.jpg">

Все, что я хочу извлечь, это только 1234. Это будет после "/" и перед ".jpg"

Как бы я это сделал?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 июля 2009

Если вы пытаетесь проанализировать любую строку, которая выглядит как /1234.jpg, то регулярные выражения - хороший способ. Если вам нужны строки, которые выглядят так только в img тегах , используйте синтаксический анализатор HTML, а не регулярное выражение.

Если это первый случай, это выражение будет соответствовать "/1234.jpg". Вы можете легко избавиться от деталей / и .jpg.

(/.+?\\.jpg)

Выражение гласит: «ищите любую строку, начинающуюся с /, заканчивающуюся .jpg и содержащую что-либо между ними».

И, используя упреждения и упреждения, этот соответствует просто "1234":

(?<=/).+?(?=\\.jpg)

Это выражение гласит: «ищите позади /, сопоставляйте что угодно, пока .jpg не станет следующим».

1 голос
/ 08 июля 2009

Вот рецепт, который вы должны быть в состоянии адаптировать, из документации RegexKitLite:

NSString *searchString =@"http://johndoe:secret@www.example.com:8080/private/mail/index.html";
NSString *regexString  = @"\\b(https?)://(?:(\\S+?)(?::(\\S+?))?@)?([a-zA-Z0-9\\-.]+)(?::(\\d+))?((?:/[a-zA-Z0-9\\-._?,'+\\&%$=~*!():@\\\\]*)+)?";

if([searchString isMatchedByRegex:regexString]) {
  NSString *protocolString = [searchString stringByMatching:regexString capture:1L];
  NSString *userString     = [searchString stringByMatching:regexString capture:2L];
  NSString *passwordString = [searchString stringByMatching:regexString capture:3L];
  NSString *hostString     = [searchString stringByMatching:regexString capture:4L];
  NSString *portString     = [searchString stringByMatching:regexString capture:5L];
  NSString *pathString     = [searchString stringByMatching:regexString capture:6L];

  NSMutableDictionary *urlDictionary = [NSMutableDictionary dictionary];

  if(protocolString) { [urlDictionary setObject:protocolString forKey:@"protocol"]; }
  if(userString)     { [urlDictionary setObject:userString     forKey:@"user"];     }
  if(passwordString) { [urlDictionary setObject:passwordString forKey:@"password"]; }
  if(hostString)     { [urlDictionary setObject:hostString     forKey:@"host"];     }
  if(portString)     { [urlDictionary setObject:portString     forKey:@"port"];     }
  if(pathString)     { [urlDictionary setObject:pathString     forKey:@"path"];     }

  NSLog(@"urlDictionary: %@", urlDictionary);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...