ios 从 nsstring 获取一个元素
ios get a element from nsstring
我需要在 <caption>
标签中找到以“©”开头并在 </caption>
标签之前结束的字符串。
例如在这个字符串中它将是:
Le pop-up "AENAON hellas made", mode produite en Grèce donc, propose une multi <caption><p></p><img class="size-full wp-image-36678" src="https://vivreaberlin.com/wp-content/uploads/2017/12/dimitrios-ourdoulidis.jpg" alt="" width="960" height="700" /> © Dimitrios Ourdoulidis</caption><br />
Et c'est très agréable de voir une boutique éphémère qui ouvre la voie à de nouveaux designers encore inconnus à Berlin. <br></br><h2>De la mode pointue</h2> <caption><p></p><img class="wp-image-36607 size-full" src="https://vivreaberlin.com/wp-content/uploads/2017/12/big-athens.png" alt="" width="1000" height="670" /> © Dig Athens</caption><br />
© Dimitrios Ourdoulidis
© 挖掘雅典
我认为你应该研究一下这种字符串匹配的正则表达式。
我并没有真正使用 objective c 但这是我在 Swift 上所做的让它工作。
var regex = ">([^>])*(</caption>)"
var testString = "Le pop-up \"AENAON hellas made\", mode produite en donc, propose une multi <caption><p></p><img class=\"size-full wp-image-36678\" src=\"https://vivreaberlin.com/wp-content/uploads/2017/12/dimitrios-ourdoulidis.jpg\" alt=\"\" width=\"960\" height=\"700\" /> © Dimitrios Ourdoulidis</caption><br />\r\n\r\nEt c'est de voir une boutique qui ouvre la voie de nouveaux designers encore inconnus Berlin. <br></br><h2>De la mode pointue</h2> <caption><p></p><img class=\"wp-image-36607 size-full\" src=\"https://vivreaberlin.com/wp-content/uploads/2017/12/big-athens.png\" alt=\"\" width=\"1000\" height=\"670\" /> © Dig Athens</caption><br />"
let regularExpression = try NSRegularExpression(pattern: regex, options: .caseInsensitive)
let matches = regularExpression.matches(in: testString, options: [], range: NSMakeRange(0, (testString as NSString).length))
print(testString)
matches.forEach {
let range = [=10=].range
let strictRange = NSMakeRange(range.lowerBound + 2, range.length - 12)
print((testString as NSString).substring(with: strictRange) as String)
}
正则表达式/>([^>])*(</caption>)/
匹配结尾>
和</caption>
所以对于您的示例字符串,匹配项之一是 > © Dimitrios Ourdoulidis</caption>
为了克服这个问题,我将匹配范围从字符串的前面减少了 2 个,从后面减少了 10 个。
使用常规的 @"©{1,1}(.)*(</){1,1}"
表达式,您可以获得这些子字符串,然后将 "</"
替换为 ""
将 return 您所期望的
- (NSMutableArray*)substrings:(NSString*)candidateString{
NSRegularExpression * exp = [[NSRegularExpression alloc]initWithPattern:@"©{1,1}(.)*(</){1,1}" options:NSRegularExpressionDotMatchesLineSeparators error:nil];
NSMutableArray *resultArray = [NSMutableArray array];
[exp enumerateMatchesInString:candidateString options:NSMatchingWithoutAnchoringBounds range:NSMakeRange(0, candidateString.length) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {
[resultArray addObject:[[candidateString substringWithRange:[result range]] stringByReplacingOccurrencesOfString:@"</" withString:@""]];
}];
NSLog(@"%@",resultArray);
return resultArray;
}
Input:
NSString* str2 = @"Le pop-up \"AENAON hellas made\", mode produite en Grèce donc, propose une multi <caption><p></p><img class=\"size-full wp-image-36678\" src=\"https://vivreaberlin.com/wp-content/uploads/2017/12/dimitrios-ourdoulidis.jpg\" alt=\"\" width=\"960\" height=\"700\" /> © Dimitrios Ourdoulidis</caption><br />";
Output
2018-01-26 15:43:30.486182+0100 RegexTestingProject[58921:2174408] (
"\U00a9 Dimitrios Ourdoulidis" )
我需要在 <caption>
标签中找到以“©”开头并在 </caption>
标签之前结束的字符串。
例如在这个字符串中它将是:
Le pop-up "AENAON hellas made", mode produite en Grèce donc, propose une multi <caption><p></p><img class="size-full wp-image-36678" src="https://vivreaberlin.com/wp-content/uploads/2017/12/dimitrios-ourdoulidis.jpg" alt="" width="960" height="700" /> © Dimitrios Ourdoulidis</caption><br />
Et c'est très agréable de voir une boutique éphémère qui ouvre la voie à de nouveaux designers encore inconnus à Berlin. <br></br><h2>De la mode pointue</h2> <caption><p></p><img class="wp-image-36607 size-full" src="https://vivreaberlin.com/wp-content/uploads/2017/12/big-athens.png" alt="" width="1000" height="670" /> © Dig Athens</caption><br />
© Dimitrios Ourdoulidis
© 挖掘雅典
我认为你应该研究一下这种字符串匹配的正则表达式。
我并没有真正使用 objective c 但这是我在 Swift 上所做的让它工作。
var regex = ">([^>])*(</caption>)"
var testString = "Le pop-up \"AENAON hellas made\", mode produite en donc, propose une multi <caption><p></p><img class=\"size-full wp-image-36678\" src=\"https://vivreaberlin.com/wp-content/uploads/2017/12/dimitrios-ourdoulidis.jpg\" alt=\"\" width=\"960\" height=\"700\" /> © Dimitrios Ourdoulidis</caption><br />\r\n\r\nEt c'est de voir une boutique qui ouvre la voie de nouveaux designers encore inconnus Berlin. <br></br><h2>De la mode pointue</h2> <caption><p></p><img class=\"wp-image-36607 size-full\" src=\"https://vivreaberlin.com/wp-content/uploads/2017/12/big-athens.png\" alt=\"\" width=\"1000\" height=\"670\" /> © Dig Athens</caption><br />"
let regularExpression = try NSRegularExpression(pattern: regex, options: .caseInsensitive)
let matches = regularExpression.matches(in: testString, options: [], range: NSMakeRange(0, (testString as NSString).length))
print(testString)
matches.forEach {
let range = [=10=].range
let strictRange = NSMakeRange(range.lowerBound + 2, range.length - 12)
print((testString as NSString).substring(with: strictRange) as String)
}
正则表达式/>([^>])*(</caption>)/
匹配结尾>
和</caption>
所以对于您的示例字符串,匹配项之一是 > © Dimitrios Ourdoulidis</caption>
为了克服这个问题,我将匹配范围从字符串的前面减少了 2 个,从后面减少了 10 个。
使用常规的 @"©{1,1}(.)*(</){1,1}"
表达式,您可以获得这些子字符串,然后将 "</"
替换为 ""
将 return 您所期望的
- (NSMutableArray*)substrings:(NSString*)candidateString{
NSRegularExpression * exp = [[NSRegularExpression alloc]initWithPattern:@"©{1,1}(.)*(</){1,1}" options:NSRegularExpressionDotMatchesLineSeparators error:nil];
NSMutableArray *resultArray = [NSMutableArray array];
[exp enumerateMatchesInString:candidateString options:NSMatchingWithoutAnchoringBounds range:NSMakeRange(0, candidateString.length) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {
[resultArray addObject:[[candidateString substringWithRange:[result range]] stringByReplacingOccurrencesOfString:@"</" withString:@""]];
}];
NSLog(@"%@",resultArray);
return resultArray;
}
Input:
NSString* str2 = @"Le pop-up \"AENAON hellas made\", mode produite en Grèce donc, propose une multi <caption><p></p><img class=\"size-full wp-image-36678\" src=\"https://vivreaberlin.com/wp-content/uploads/2017/12/dimitrios-ourdoulidis.jpg\" alt=\"\" width=\"960\" height=\"700\" /> © Dimitrios Ourdoulidis</caption><br />";
Output
2018-01-26 15:43:30.486182+0100 RegexTestingProject[58921:2174408] ( "\U00a9 Dimitrios Ourdoulidis" )