Objective c NSRegularExpression修改正则表达式组(回调)

Objective c NSRegularExpression修改正则表达式组(回调),objective-c,regex,regex-group,Objective C,Regex,Regex Group,我需要将文本转换为以下两种格式之一: [[anyText~编号]]或[[anyText]] 要转换为相应的html格式: 任意文本或任意文本 例如: 谢谢你 及 [你好]你好 为此,我在NSString类别中创建了以下函数: - (NSString*) stringByReplacingOccurrencesOfRegex:(NSString*)regexString withString:(NSString*)replaceWithString { NSError* error;

我需要将文本转换为以下两种格式之一:

[[anyText~编号]]或[[anyText]]

要转换为相应的html格式:

任意文本或任意文本

例如:

谢谢你

[你好]你好

为此,我在NSString类别中创建了以下函数:

- (NSString*) stringByReplacingOccurrencesOfRegex:(NSString*)regexString withString:(NSString*)replaceWithString {
    NSError* error;
    NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:regexString options:NSRegularExpressionCaseInsensitive error:&error];
    NSRange fullrange = NSMakeRange(0,self.length);
    return [regex stringByReplacingMatchesInString:self options:NSMatchingWithTransparentBounds range:fullrange withTemplate:replaceWithString];
}
在我的代码中,我使用了以下内容:

    regexString = @"\\[\\[([^\\]]*)\\]\\]";
    replaceWithString = @"<span name=\"$1\">$1</span>";
    rawStoryString = [rawStoryString stringByReplacingOccurrencesOfRegex:regexString withString:replaceWithString];
结果是anyText~number。有没有办法对$1进行操作,比如说removeTilderAndFurther$1,在这种情况下,我的代码变成replaceWithString=@removeTilderAndFurther$1;,这样我就可以实现我的目标。

试试这个正则表达式:

\[\[(\w+)(~\d+)?\]\]
并替换为:

<span name="$1$2">$1</span>
说明:

\w 匹配任何单词字符

\d 匹配任何十进制数字

+与上一个元素匹配一次或多次

子表达式 捕获匹配的子表达式并为其指定一个从零开始的序号


多好的主意,添加一个类别来实现这一点!我可以这样做:

NSString *regexString = @"\\[\\[((\\w+)(~\\d+)?)\\]\\]";
NSString *replaceWithString = @"<span name=\"$1\">$2</span>";
其产出是:

rawStoryString: [[Hello]]
rawStoryString: <span name="Hello">Hello</span>
rawStoryString: [[Thanks~1]]
rawStoryString: <span name="Thanks~1">Thanks</span>
其产出是:

rawStoryString: [[Hello]]
rawStoryString: <span name="Hello">Hello</span>
rawStoryString: [[Thanks~1]]
rawStoryString: <span name="Thanks~1">Thanks</span>

谢谢只要格式为[[anyText~number]],此选项就有效。我的一些字符串是[[anyText]]格式的,在这种情况下,这个正则表达式失败了,我正在更新我的帖子以引出这个问题。你能提供一个适用于这两种情况的正则表达式吗?谢谢。我刚得到杰森的答案,因此把它标对了。谢谢你,杰森。对不起,我太贪心了。。。这里是否可以引入一种变体。。。1美元变成小写。。。ie,输出是Hello和Thank