2016-04-05 6 views
1

Ich möchte Url Bilder von der String mit NSRegularExpression abrufen.Find String aus String mit 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) 
    } 
} 

Es funktioniert nur mit dem einfachen String aber nicht mit den HTMLString. Beispiel

Arbeits:

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

findURlUsingExpression(tempString) 

Ausgang:

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

Aber nicht mit dieser Arbeit ein: http://www.writeurl.com/text/478sqami3ukuug0r0bdb/i3r86zlza211xpwkdf2m

Antwort

2

Sie Ihre eigenen regex nicht rollen, wenn Sie helfen können es. Der einfachste und sicherste Weg ist die Verwendung von NSDataDetector. Indem Sie NSDataDetector verwenden, nutzen Sie ein vorgefertigtes, häufig verwendetes Parsing-Tool, von dem die meisten Fehler bereits beseitigt sein sollten.

Hier ist ein guter Artikel über sie: NSData​Detector

NSDataDetector ist eine Unterklasse von NSRegularExpression, sondern statt Anpassung auf einer Intensivstation Muster erkennt es semi-strukturierte Informationen: Termine, Adressen, Links, Telefonnummern und Transit-Informationen.

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" 

Das Beispiel ist von dieser Seite, für einen Link zur Suche angepasst.

+0

Ich werde versuchen, Sie wissen zu lassen! –

+0

Es funktioniert, aber gibt falschen Link zurück - 'http://i-wallpapers.blogspot.com/2011/12/christmas-iphone-wallpapers.html ", imgurl: " http://2.bp.blogspot.com/- w6JW7Dif8kc/TvDIZcOX7nI/AAAAAAAAAQQ/9-7TXCZlutM/s1600/iphone_christmas_wallpaper +% 25282% 2529.jpg' –

+0

Ist das die Zeichenfolge, die Sie analysieren möchten, oder ist das eine Website, die Sie besuchen, um Daten zum Analysieren zu erhalten? – ColGraff