Objective c NSRegularExpression修改正则表达式组(回调)
我需要将文本转换为以下两种格式之一: [[anyText~编号]]或[[anyText]] 要转换为相应的html格式: 任意文本或任意文本 例如: 谢谢你 及 [你好]你好 为此,我在NSString类别中创建了以下函数: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;
- (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