在NSScanner的文本输出中包含最后一个字符

时间:2012-10-17 00:08:19

标签: objective-c nsscanner

我正在使用NSScanner检测字符串中[方括号]绑定的文本,并将其转换为HTML超链接。我希望以下列方式转换此文本:

This [is an] example of the [text] I'm using

应转换为

This <a href = "is an">is an</a> example of the <a href = "text">text</a> I'm using

我已经实现了NSScanner,但为了使其正常工作,我需要提取方括号的第一个和第二个。

这是我的代码的当前状态:

NSScanner *theScanner;
NSString *text = nil;
theScanner = [NSScanner scannerWithString:stringWithBrackets];

NSString *stringWithoutBrackets;
while ([theScanner isAtEnd] == NO) {
    [theScanner scanUpToString:@"[" intoString:NULL];
    [theScanner scanUpToString:@"]" intoString:&text];

<BREAK>

在此断点处,我返回了一个字符串, not 包含结束括号。因此,对于上面显示的示例文本字符串,第一个断点处的NSString * text的内容为

[is an

为了正确操作字符串,我需要同时使用开始和结束括号。

基本上,我的问题是:如何在一个字符上推进NSScanner,并将该字符包含在变量'text'中?

1 个答案:

答案 0 :(得分:2)

您可以使用]跳过scanString个字符:

if ([theScanner scanString:@"]" intoString:NULL]) {
    text = [text stringByAppendingString:@"]"];
} else {
    // Next character is not ']'
}

只有在没有匹配的else字符时才会发生]情况。 text包含[到该字符串末尾的部分。

或者,您可以使用NSRegularExpression,例如matchesInString方法,返回与正则表达式匹配的字符串中所有范围的数组。