2015-10-25 135 views
-1

我有一個正則表達式的xml文件。當我讀到它時,我在regex變量中得到一個表達式<a class="call-to-action-details".*?\shref="(.*?)"轉義正則表達式

然後我打電話給我的字符串方法:print(text.searchRegex(regex)),它什麼都沒有返回。

但是,如果我把我的正則表達式的方法和逃避一些字符,然後返回結果:

print(text.searchRegex("<a class=\"call-to-action-details\".*?\\shref=\"(.*?)\"")) 

如何轉義字符?或者我做錯了什麼?我regexSearch功能:

do { 
    let regex = try NSRegularExpression(pattern: regex, 
     options: NSRegularExpressionOptions(rawValue: 0)) 
    let nstext = text as NSString 
    let all = NSRange(location: 0, length: nstext.length) 
    var matches: Array<String> = Array<String>() 
    regex.enumerateMatchesInString(text, 
      options: NSMatchingOptions(rawValue: 0), 
      range: all) { 
     (result : NSTextCheckingResult?, _, _) in 
     let theResult = nstext.substringWithRange(result!.rangeAtIndex(1)) 
     matches.append(theResult) 
    } 
    print(matches) 
    return matches.joinWithSeparator("") 
} catch { 
    return "" 
} 
+0

你有沒有嘗試調用'escapedPatternForString:'? – matt

回答

0

在字符串中,反斜槓(\)和雙引號(")需要用反斜槓轉義。

對您的模式字符串使用相同名稱regex作爲結果NSRegularExpression也可能是一個壞主意。

從文件中讀取正則表達式時,不需要像在文字中那樣轉義字符。

<a class="call-to-action-details".*?\shref="(.*?)" 

表達可以直接由NSRegularExpression從文件中讀出時被使用。

如果你沒有得到與文件中的正則表達式的匹配,請嘗試檢查你的工作正則表達式文本和你正在閱讀的字符串是否相等。可能有一個額外的字符導致它們不匹配。

除此之外,您的代碼將抓取匹配沒有問題。