2016-08-05 27 views
2


mit i nur die Links von Webseiten extrahiert werden soll nach dem folgenden Code:Extrakt genaue Links von String Regex in schnellen 2,2

import UIKit 
import Foundation 

func regMatchGroup(regex: String, text: String) -> [String] { 
    do { 
     let regex = try NSRegularExpression(pattern: regex, options: []) 
     let nsString = text as NSString 
     let results = regex.matchesInString(text, 
              options: [], range: NSMakeRange(0, nsString.length)) 
     var internalString = [String]() 
     for result in results { 

      for var i = 0; i < result.numberOfRanges; ++i{ 
       internalString.append(nsString.substringWithRange(result.rangeAtIndex(i))) 
      } 
     } 
     return internalString 
    } catch let error as NSError { 
     print("invalid regex: \(error.localizedDescription)") 
     return [] 
    } 
} 
// USAGE: 
let textsearch = "mohamed amine ammach <img alt='http://fb.com' /> hhhhhhhhhhh <img alt='http://google.com' />" 
let matches = regMatchGroup("alt='(.*?)'", text: textsearch) 
if (matches.count > 0) // If we have matches.... 
{ 
    for (var i=0;i < matches.count;i++) { 

     print(matches[i]) 

    } 
} 

die playgrond druckt die folgenden:

alt='http://fb.com' 
http://fb.com 
alt='http://google.com' 
http://google.com 

aber i sind nur zu erhalten versuchen:
http://fb.com
http://google.com
Dose hier jemand mir helfen, dieses Problem zu lösen, werde mir

+0

Ihr Ergebnis ist in ersten Capturing Gruppe – rock321987

Antwort

0

Sie müssen klar sein, wissen, dass NSTextCheckingResult.rangeAtIndex(_:) kehrt der Bereich mit Index, der den ganzen RegexMuster passend 0.

In Ihrem Fall:

rangeAtIndex(0) -> Bereich für alt='(.*?)' ->alt='http://fb.com'

rangeAtIndex(1) -> Bereich für (.*?) ->http://fb.com

Sie müssen also den Indexwert 0 überspringen, wenn Sie einen übereinstimmenden String erzeugen.

Versuchen Sie, inner meist auf-Anweisung: (. Sie müssen noch eine Sache wissen, dass C-Stil für-Anweisung ist veraltet)

  for i in 1 ..< result.numberOfRanges { //start index from 1 
       internalString.append(nsString.substringWithRange(result.rangeAtIndex(i))) 
      } 

+0

Vielen Dank, es funktioniert für mich –