gpt4 book ai didi

iphone - 如何在iOS中使用正则表达式获取匹配项?

转载 作者:行者123 更新时间:2023-12-03 18:17:04 25 4
gpt4 key购买 nike

我有一个像“stackoverflow.html”这样的字符串,并且在正则表达式“stack(.).html”中我希望在 (.) 中包含值。

我只能找到像这样的 NSPredicate:

NSString    *string     = @"stackoverflow.html";
NSString *expression = @"stack(.*).html";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", expression];
BOOL match = [predicate evaluateWithObject:string]

但是,当我使用 NSRegularExpression 时,这仅表明我获得了匹配项,并且不返回字符串:

NSRange range = [string rangeOfString:expression options:NSRegularExpressionSearch|NSCaseInsensitiveSearch];
if (range.location == NSNotFound) return nil;

NSLog (@"%@", [string substringWithRange:(NSRange){range.location, range.length}]);

它将返回总字符串 stackoverflow.html,但我只对 (.*) 中的内容感兴趣。我想恢复“溢出”。在 PHP 中这很容易做到,但是如何在 iOS 的 xCode 中实现这一点呢?

从逻辑上讲,如果我这样做:

NSInteger firstPartLength  = 5;
NSInteger secondPartLength = 5;
NSLog (@"%@", [string substringWithRange:(NSRange){range.location + firstPartLength, range.length - (firstPartLength + secondPartLength)}]

它给了我属性结果“溢出”。但问题是很多时候我不知道第一部分或第二部分的长度。那么有没有办法获得 (.*) 中应有的值?

或者我必须决定通过查找 (.) 的位置来选择最丑陋的方法并从那里计算第一部分和第二部分?但在正则表达式中,您可能也有 ([a-z]) ,但是使用另一个正则表达式来获取 () 之间的值的位置,然后用它来计算左右部分的丑陋方式?如果我有更多会怎样?就像“A (.) 应该找到 (.*) 的答案。”我想要一个数组作为结果,其值为 [0] A 之后的值和 [1] to 之后的值。

我希望我的问题很清楚。

提前致谢,

最佳答案

在 iOS 4.0+ 中,您可以使用 NSRegularExpression:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"stack(.*).html" options:0 error:NULL];
NSString *str = @"stackoverflow.html";
NSTextCheckingResult *match = [regex firstMatchInString:str options:0 range:NSMakeRange(0, [str length])];
// [match rangeAtIndex:1] gives the range of the group in parentheses
// [str substringWithRange:[match rangeAtIndex:1]] gives the first captured group in this example

关于iphone - 如何在iOS中使用正则表达式获取匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4184845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com