objective-c正则表达式匹配

时间:2014-10-16 04:56:29

标签: objective-c regex

如果我有连续的句子而且我想匹配它们中的每一个,例如:

  

[symbol] bla bla bla bla [/ symbol] [symbol] text text text [/ symbol]

我试着像这样数学:

  

“\ [符号]。* [/符号]]”

但它返回了我的完整字符串,如何匹配它们的每一部分?

3 个答案:

答案 0 :(得分:1)

您需要使用惰性.*?模式

\[symbol\].*?\[\/symbol\]

将匹配

[symbol]bla bla bla bla[/symbol]

如果你想匹配所有这些,请分别使用global(g)说明符

将与单独匹配

[symbol]bla bla bla bla[/symbol]
[symbol]text text text[/symbol]

答案 1 :(得分:0)

您想要使用

  • *? - 这将匹配尽可能少的字符

  • 我假设,在结果中,您不需要[symbol][/symbol],而只需要介于两者之间的文本。因此,您可以使用“捕获括号”来指定要返回的内容。

  • 您还希望用反斜杠“引用”[/字符。

这会产生:

\[symbol](.*?)\[\/symbol]

显然,当您想在字符串中表示\时,您需要使用\\。因此产量:

NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[symbol](.*?)\\[\\/symbol]" options:NSRegularExpressionCaseInsensitive error:&error];
if (!regex) {
    NSLog(@"regex error: %@", error);
}

[regex enumerateMatchesInString:string options:0 range:NSMakeRange(0, [string length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
    NSString *foundString = [string substringWithRange:[result rangeAtIndex:1]]; // use result.range if you want to include the `[symbol]` and `[/symbol]`
    NSLog(@"%@", foundString);
}];

产生:

2014-10-16 01:32:26.680 MyApp[66822:303] bla bla bla bla
2014-10-16 01:32:26.681 MyApp[66822:303] text text text

答案 2 :(得分:0)

使用这个正则表达式它会匹配你想要的。

\[symbol\]((?:(?!\[\/?symbol\]).)*)\[\/symbol\]

见DEMO: http://regex101.com/r/aR7cG7/1