如果我有连续的句子而且我想匹配它们中的每一个,例如:
[symbol] bla bla bla bla [/ symbol] [symbol] text text text [/ symbol]
我试着像这样数学:
“\ [符号]。* [/符号]]”
但它返回了我的完整字符串,如何匹配它们的每一部分?
答案 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\]