我需要转换以下两种格式之一的文字:
[[anyText~number]]
或[[anyText]]
各自的html格式:
<span name="anyText~number">anyText</span>
或<span name="anyText">anyText</span>
示例:
[[Thanks~1]]
至<span name="Thanks~1">Thanks</span>
和
[[Hello]]
至<span name="Hello">Hello</span>
为此,我在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];
结果是<span name=\"anyText~number\">anyText~number</span>
。有没有办法可以对$1
进行操作(比如removeTilderAndFurther($1)
,在这种情况下,我的代码变为replaceWithString = @"<span name=\"$1\">removeTilderAndFurther($1)</span>";
),这样我就可以实现我的目标。
答案 0 :(得分:0)
试试这个正则表达式:
\[\[(\w+)(~\d+)?\]\]
并替换为:
<span name="$1$2">$1</span>
说明:
的
\w
强> 的 匹配任何单词字符。的
\d
强> 的 匹配任何十进制数字。
+
匹配上一个元素一次或多次。的
(subexpression)
强> 的 捕获匹配的子表达式并为其指定从零开始的序数。
答案 1 :(得分:0)
这是一个好主意,添加一个类别来做到这一点!我能够这样做:
NSString *regexString = @"\\[\\[((\\w+)(~\\d+)?)\\]\\]";
NSString *replaceWithString = @"<span name=\"$1\">$2</span>";
没有任何数字的第一种情况 [[Hello]]
:
NSString *rawStoryString = @"[[Hello]]";
NSLog(@"rawStoryString: %@", rawStoryString);
rawStoryString = [rawStoryString stringByReplacingOccurrencesOfRegex:regexString withString:replaceWithString];
NSLog(@"rawStoryString: %@", rawStoryString);
它的输出是:
rawStoryString: [[Hello]]
rawStoryString: <span name="Hello">Hello</span>
波形符和数字 [[Thanks~1]]
的第二种情况:
rawStoryString = @"[[Thanks~1]]";
NSLog(@"rawStoryString: %@", rawStoryString);
rawStoryString = [rawStoryString stringByReplacingOccurrencesOfRegex:regexString withString:replaceWithString];
NSLog(@"rawStoryString: %@", rawStoryString);
它的输出是:
rawStoryString: [[Thanks~1]]
rawStoryString: <span name="Thanks~1">Thanks</span>