我写了一个正则表达式(在Objective C中),在字符串中找到以下子字符串:
+RA, -RA, RA, +SN, -SN, SN, +DZ, -DZ, DZ
原始RE是:
NSString* expression = @"^.*?(RA|SN|DZ).*?$";
然而,由于。*实际上意味着什么,RE还检测子串" DSNT",例如,我试图避免。所以我没有使用^。*?而是尝试编写像
这样的东西@"^(-|+)?(RA|SN|DZ).*?$";
但是因为" +"符号在RE中具有特殊含义,它不能按预期工作:子字符串未被识别。所以,我想知道如何整合" +"在上面的RE代码中签名。
非常感谢!
答案 0 :(得分:3)
+
字符具有特殊含义,可以将其转义或将这些字符放在字符类中:
[-+]
如果要匹配所有子字符串,请从正则表达式中删除锚点并考虑此正则表达式:
NSString* expression = @"([-+]?(?:RA|SN|DZ)\\b)"
如果这不起作用,您可以使用以下内容来匹配+
字符。
[-\\x2b]
答案 1 :(得分:1)
试试以下正则表达式,
.*?(-|\+)?(RA|SN|DZ).*?
答案 2 :(得分:1)
使用此:
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[+-](?:RA|SN|DZ)\b" options:NSRegularExpressionCaseInsensitive error:&error];
NSArray *matches = [regex matchesInString:subject options:0 range:NSMakeRange(0, [subject length])];
NSUInteger matchCount = [matches count];
if (matchCount) {
for (NSUInteger matchIdx = 0; matchIdx < matchCount; matchIdx++) {
NSTextCheckingResult *match = [matches objectAtIndex:matchIdx];
NSRange matchRange = [match range];
NSString *result = [subject substringWithRange:matchRange];
}
}
else { // Nah... No matches.
}
<强>解释强>
[+-]
匹配加号或减号(?:RA|SN|DZ)
匹配三个令牌之一