Регулярное выражение для синтаксического анализа html;

#objective-c #ios #regex #facebook #parsing

#objective-c #iOS #регулярное выражение #Facebook #синтаксический анализ

Вопрос:

Не могли бы вы помочь мне создать регулярное выражение? В большой строке мне нужно найти эти подстроки (2 формата):

http://www.facebook.com/profile.php?id=100002234024152amp;ref=ffa http://www.facebook.com/alesya.yuldasheva?ref=ffa

Я пробовал эти:

 @"\b(https?)://www.facebook.com([.]{*})ref=ffa";
@"[{http://www.facebook.com}([.]{*}){ref=ffa}]";
@"[http://www.facebook.com]([.])*[ref=ffa]";
 

Я использую RegexKitLite, синтаксис которого такой же, как у обычных регулярных выражений objective c.

Комментарии:

1. вероятно, вам следует указать имя в адресе, поскольку оно ведет непосредственно на вашу или некоторые другие страницы facebook. что-то вроде ` facebook.com/xxxxxxx.xxxxxxxx?ref=ffa `

Ответ №1:

 NSError *error = nil;
NSString *htmlAdr = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.example.com"] encoding:NSUTF8StringEncoding error:amp;error];
if (error){
    NSLog(@"Yaz");
}
 // NSLog(@"%@", htmlAdr);
NSString *wereWeAreGoingToFind = htmlAdr;
NSString *whatWewAreGoingToFind1 = @"\bhttps?:\\/\\/[a-zA-Z0-9\-.]*\\/profile.php\?id=([\d]*)\amp;amp;ref=ffa";
NSString *whatWewAreGoingToFind = @"\bhttps?:\\/\\/[a-zA-Z0-9\-.]*\\/([a-zA-Z0-9\-.]*)\?ref=pb";
NSArray *matchArray = [wereWeAreGoingToFind componentsMatchedByRegex:whatWewAreGoingToFind capture:1L];
NSArray *matchArray1 = [wereWeAreGoingToFind componentsMatchedByRegex:whatWewAreGoingToFind1 capture:1L];
matchArray = [matchArray arrayByAddingObjectsFromArray:matchArray1];
NSLog(@"%@", matchArray);
 

Ответ №2:

Я не знаю objective-c, но это регулярное выражение — это то, что вам нужно:

b(https?)://www.facebook.com/(.*?)ref=ffab

Само собой разумеется, что вам нужно будет избежать косых черт самостоятельно

Комментарии:

1. Я знаю, что вы поступаете правильно. Я пытался сделать точно такой же, но obj c не имеет обычного синтаксиса (не как, например, perl)… Итак, я знаю, что мне нужно делать, но не знаю, как это сделать..

2. @user997822: глядя на документацию, синтаксис выглядит довольно стандартным.

Ответ №3:

Похоже, вам также нужно экранировать ‘.’ в URL. Например:

@»b(https?)://www.facebook.com /(.*?)ref=ffa»;