Pra*_*azi 8 regex objective-c nsregularexpression swift swift3
如何使用NSRegularExpression在"badgeCount"标记之间提取值"6".以下是服务器的响应:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><badgeCount>6</badgeCount><rank>2</rank><screenName>myName</screenName>
Run Code Online (Sandbox Code Playgroud)
以下是我尝试但未取得成功的代码.实际上它进入了其他部分并打印"正则表达式的值是零":
NSString *responseString = [[NSString alloc] initWithBytes:[responseDataForCrntUser bytes] length:responseDataForCrntUser.length encoding:NSUTF8StringEncoding];
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=badgeCount>)(?:[^])*?(?=</badgeCount)" options:0 error:&error];
if (regex != nil) {
NSTextCheckingResult *firstMatch = [regex firstMatchInString:responseString options:0 range:NSMakeRange(0, [responseString length])];
NSLog(@"NOT NIL");
if (firstMatch) {
NSRange accessTokenRange = [firstMatch rangeAtIndex:1];
NSString *value = [urlString substringWithRange:accessTokenRange];
NSLog(@"Value: %@", value);
}
}
else
NSLog(@"Value of regex is nil");
Run Code Online (Sandbox Code Playgroud)
如果您能提供非常感谢的示例代码.
注意:我不想使用NSXMLParser.
zap*_*aph 18
例:
NSString *xml = @"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><badgeCount>6</badgeCount><rank>2</rank><screenName>myName</screenName>";
NSString *pattern = @"<badgeCount>(\\d+)</badgeCount>";
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:pattern
options:NSRegularExpressionCaseInsensitive
error:nil];
NSTextCheckingResult *textCheckingResult = [regex firstMatchInString:xml options:0 range:NSMakeRange(0, xml.length)];
NSRange matchRange = [textCheckingResult rangeAtIndex:1];
NSString *match = [xml substringWithRange:matchRange];
NSLog(@"Found string '%@'", match);
Run Code Online (Sandbox Code Playgroud)
NSLog输出:
Found string '6'
Run Code Online (Sandbox Code Playgroud)
在 swift 3.0 中做到这一点
func getMatchingValueFrom(strXML:String, tag:String) -> String {
let pattern : String = "<"+tag+">(.*?)</"+tag+">" // original didn't work: "<"+tag+">(\\d+)</"+tag+">"
let regexOptions = NSRegularExpression.Options.caseInsensitive
do {
let regex = try NSRegularExpression(pattern: pattern, options: regexOptions)
let textCheckingResult : NSTextCheckingResult = regex.firstMatch(in: strXML, options: NSRegularExpression.MatchingOptions(rawValue: UInt(0)), range: NSMakeRange(0, strXML.count))!
let matchRange : NSRange = textCheckingResult.range(at: 1)
let match : String = (strXML as NSString).substring(with: matchRange)
return match
} catch {
print(pattern + "<-- not found in string -->" + strXML )
return ""
}
}
Run Code Online (Sandbox Code Playgroud)
PS:这是@zaph在obj-c中的解决方案的相应快速解决方案
| 归档时间: |
|
| 查看次数: |
7711 次 |
| 最近记录: |