2016-04-05 4 views
1

Я хочу получить URL-адрес изображений из String с помощью NSRegularExpression.Найти строку из строки с помощью NSRegularExpression Swift

func findURlUsingExpression(urlString: String){ 

    do{ 

     let expression = try NSRegularExpression(pattern: "\\b(http|https)\\S*(jpg|png)\\b", options: NSRegularExpressionOptions.CaseInsensitive) 

     let arrMatches = expression.matchesInString(urlString, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, urlString.characters.count)) 

     for match in arrMatches{ 

      let matchText = urlString.substringWithRange(Range(urlString.startIndex.advancedBy(match.range.location) ..< urlString.startIndex.advancedBy(match.range.location + match.range.length))) 
      print(matchText) 
     } 

    }catch let error as NSError{ 

     print(error.localizedDescription) 
    } 
} 

Он работает только с простой строкой, но не с HTMLString.

Рабочий пример:

let tempString = "jhgsfjhgsfhjgajshfgjahksfgjhs http://jhsgdfjhjhggajhdgsf.jpg jahsfgh asdf ajsdghf http://jhsgdfjhjhggajhdgsf.png" 

findURlUsingExpression(tempString) 

Выход:

http://jhsgdfjhjhggajhdgsf.jpg 
http://jhsgdfjhjhggajhdgsf.png 

Но не работает с этим один: http://www.writeurl.com/text/478sqami3ukuug0r0bdb/i3r86zlza211xpwkdf2m

ответ

2

Не свернуть свой собственный регулярное выражение, если вы можете помочь Это. Самый простой и безопасный способ - использовать NSDataDetector. Используя NSDataDetector, вы используете заранее разработанный, сильно используемый инструмент синтаксического анализа, который должен уже иметь большинство ошибок, отброшенных из него.

Вот хорошая статья о нем: NSData​Detector

NSDataDetector является подклассом NSRegularExpression, но вместо согласования на диаграммы направленности ICU, он обнаруживает полуструктурированное информацию: даты, адреса, ссылки, номера телефонов и информацию о транзите.

import Foundation 

let tempString = "jhgsfjhgsfhjgajshfgjahksfgjhs http://example.com/jhsgdfjhjhggajhdgsf.jpg jahsfgh asdf ajsdghf http://example.com/jhsgdfjhjhggajhdgsf.png" 

let types: NSTextCheckingType = [.Link] 
let detector = try? NSDataDetector(types: types.rawValue) 
detector?.enumerateMatchesInString(tempString, options: [], range: NSMakeRange(0, (tempString as NSString).length)) { (result, flags, _) in 
    if let result = result?.URL { 
    print(result) 
    } 
} 

// => "http://example.com/jhsgdfjhjhggajhdgsf.jpg" 
// => "http://example.com/jhsgdfjhjhggajhdgsf.png" 

пример с этого сайта, адаптированный для поиска ссылки.

+0

Я попробую и дам вам знать! –

+0

Он работает, но возвращает неверную ссылку - 'http://i-wallpapers.blogspot.com/2011/12/christmas-iphone-wallpapers.html ", imgurl: " http://2.bp.blogspot.com/- w6JW7Dif8kc/TvDIZcOX7nI/AAAAAAAAAQg/9-7TXCZlutM/s1600/iphone_christmas_wallpaper +% 25282% 2529.jpg' –

+0

Это строка, которую вы пытаетесь разобрать или это сайт, который вы посещаете, чтобы получить данные для разбора? – ColGraff