Я начинаю развиваться в Objective-C, и у меня возникла проблема с поиском правильного регулярного выражения для перечисления якоря в документе HTML.
Пример: У меня есть этот код HTML:
<ul>
<li><a class="class1" href="/document1.html"></li>
<li><a class="class1" href="/document2.html"></li>
<li><a class="class1" href="/document3.html"></li>
</ul>
Я хочу получить NSArray с таким результатом:
/document1.html
/document2.html
/document3.html
Как я могу сделать хорошее регулярное выражение для этого?
Сложно сделать это правильно в регулярном выражении, со всеми общими, которые позволяет HTML. Лучше использовать HTML-парсер, например Hpple. См. Ray Wenderlich. Как анализировать HTML на iOS.
Но, если вас интересуют только некоторые особые случаи (например, href
всегда в двойных кавычках), вы можете сделать что-то вроде:
NSRegularExpression *regex;
regex = [NSRegularExpression regularExpressionWithPattern:@"<a\\s[^>]*(?<=\\s)href\\s*=\\s*\"(.*?)\".*?>"
options:NSRegularExpressionCaseInsensitive
error:&error];
Здесь существует множество ограничений, но, возможно, это отправная точка. Для чего-то более общего, вам действительно нужно использовать HTML-парсер, а не регулярное выражение.