对于给定的 NSstring,我需要搜索一个 IP 地址并显示它。 下面是示例代码,但不知道为什么它不起作用。
字符串是
(SII_Bg
SII Bg
Disconnected ( User Disconnected )
N/A
SII_Bg_IP
SII Bg via Router
Connected (00:19:36)
191.30.33.55
N/A
)
函数搜索IPString()
var validIpAddressRegex : String = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
let regex = try! NSRegularExpression(pattern : validIpAddressRegex, options: NSRegularExpressionOptions.CaseInsensitive)
let abc = NSString(data: myData, encoding: NSUTF8StringEncoding)
let xyz = abc as! String
let newString = xyz.stringByReplacingOccurrencesOfString("\n", withString: " ", options: NSStringCompareOptions.LiteralSearch, range: nil)
let results = regex.matchesInString(newString,
options: [], range: NSMakeRange(0, abc!.length))
as! [NSTextCheckingResult]
print(results)
- mydata 是正在转换为 NSString 的 NSData。
- mydata 包含以上值。
- 替换新字符串中的“\n”。
但结果值为“0 个元素”,即使该字符串具有有效的 ip 地址。 请让我知道哪里出错了。
谢谢
最佳答案
您甚至可以稍微简化正则表达式。做这样的事情。
func searchIPString(string: String) -> [String]? {
let regex = "\\d{1,3}[.]\\d{1,3}[.]\\d{1,3}[.]\\d{1,3}"
do {
let regularExpresion = try NSRegularExpression(pattern: regex, options: .CaseInsensitive)
let matches = regularExpresion.matchesInString(string, options: .ReportCompletion, range: NSMakeRange(0, string.characters.count))
var matchingIPs = [String]()
let convertedString = string as NSString
matches.forEach { textCheckingResult in
let range = textCheckingResult.range
let foundIP = convertedString.substringWithRange(range) as String
matchingIPs.append(foundIP)
}
return matchingIPs
} catch let error as NSError{
print("Regular Expression Format is Wrong: \(error.localizedDescription)")
}
return []
}
关于ios - 无法使用 Swift 2 在给定字符串中搜索模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33215303/