gpt4 book ai didi

objective-c - 在 objective-c 中是否有可能获得字符串中正则表达式匹配的位置

转载 作者:行者123 更新时间:2023-12-02 05:43:13 25 4
gpt4 key购买 nike

如果我有字符串“Hello World”,是否可以使用带有模式@“World”的 NSRegularExpression 来获取匹配的位置,即在“Hello World”示例中,匹配的位置/索引应该是“6”吗?

在 php 中我会使用 preg_match使用“PREG_OFFSET_CAPTURE”标志来实现这一点,objective-c 支持吗?

最佳答案

你可以用 Cocoa 的方式来做:

NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:@"world" options:0 error:NULL];
// omitted error checking for the sake of simplicity
NSString *str = @"Hello world!";
[regex enumerateMatchesInString:str
options:0
range:NSMakeRange(0, str.length)
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop)
{
NSLog(@"Match at [%d, %d]", result.range.location, result.range.length);
}];
[regex release];

或者 POSIX 方式(这对你来说可能很方便,因为你只需要一个匹配,而这个函数/方法直接返回匹配范围):

#include <regex.h>

- (NSRange)matchString:(NSString *)string toRegex:(NSString *)regex
{
regex_t regex_obj;
regmatch_t match;
const char *regex_str;
const char *match_str;
int error;

regex_str = [regex UTF8String];
error = regcomp(&regex_obj, regex_str, REG_EXTENDED);
if (error)
{
return NSMakeRange(NSNotFound, 0);
}

match_str = [string UTF8String];
error = regexec(&regex_obj, match_str, 1, &match, 0);
if (error)
{
return NSMakeRange(NSNotFound, 0);
}

regfree(&regex_obj);
return NSMakeRange(match.rm_so, match.rm_eo - match.rm_so);
}

关于objective-c - 在 objective-c 中是否有可能获得字符串中正则表达式匹配的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10670858/

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