使用正则表达式提取两个标记之间的文本
Extract text between two markers with Regular Expression
简单的正则表达式问题。我有以下格式的字符串:
[page]
Some text with multi line.
[page/]
[page]
Another text with multi line.
[page/]
[page]
Third text with multi line.
[page/]
提取[page]
和[page/]
之间文本的正则表达式是什么?
我正在使用这个代码,但我只得到了第一个匹配项。
NSString *path = [[NSBundle mainBundle] pathForResource:@"File" ofType:@"txt"];
NSString *mainText = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSError *error = NULL;
NSRange range = NSMakeRange(0, mainText.length);
NSString *pattern = [NSString stringWithFormat:@"(?<=\[page])(?s)(.*?)(?=\[page/])"];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:mainText options:0 range:range];
if (!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0))) {
NSString *substringForFirstMatch = [mainText substringWithRange:rangeOfFirstMatch];
NSLog(@"sub: %@", substringForFirstMatch);
}
我怎么能不显示 NSArray 中每个匹配项的文本?
您可以使用 matchesInString:options:range:
,其中 returns 匹配数组作为 NSTextCheckingResults:
NSString *pattern = [NSString stringWithFormat:@"(?<=\[page\])(.*?)(?=\[page\/\])"];
NSUInteger options = NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:options error:&error];
for (NSTextCheckingResult* result in [regex matchesInString:INPUT_STRING
options:0
range:NSMakeRange(0, [input_string_length])])
{
// further code
}
简单的正则表达式问题。我有以下格式的字符串:
[page]
Some text with multi line.
[page/]
[page]
Another text with multi line.
[page/]
[page]
Third text with multi line.
[page/]
提取[page]
和[page/]
之间文本的正则表达式是什么?
我正在使用这个代码,但我只得到了第一个匹配项。
NSString *path = [[NSBundle mainBundle] pathForResource:@"File" ofType:@"txt"];
NSString *mainText = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSError *error = NULL;
NSRange range = NSMakeRange(0, mainText.length);
NSString *pattern = [NSString stringWithFormat:@"(?<=\[page])(?s)(.*?)(?=\[page/])"];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:mainText options:0 range:range];
if (!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0))) {
NSString *substringForFirstMatch = [mainText substringWithRange:rangeOfFirstMatch];
NSLog(@"sub: %@", substringForFirstMatch);
}
我怎么能不显示 NSArray 中每个匹配项的文本?
您可以使用 matchesInString:options:range:
,其中 returns 匹配数组作为 NSTextCheckingResults:
NSString *pattern = [NSString stringWithFormat:@"(?<=\[page\])(.*?)(?=\[page\/\])"];
NSUInteger options = NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:options error:&error];
for (NSTextCheckingResult* result in [regex matchesInString:INPUT_STRING
options:0
range:NSMakeRange(0, [input_string_length])])
{
// further code
}