如何在正则表达式中包含“+”

时间:2014-07-17 03:02:26

标签: regex

我写了一个正则表达式(在Objective C中),在字符串中找到以下子字符串:

+RA, -RA, RA, +SN, -SN, SN, +DZ, -DZ, DZ

原始RE是:

NSString* expression = @"^.*?(RA|SN|DZ).*?$";

然而,由于。*实际上意味着什么,RE还检测子串" DSNT",例如,我试图避免。所以我没有使用^。*?而是尝试编写像

这样的东西
@"^(-|+)?(RA|SN|DZ).*?$";

但是因为" +"符号在RE中具有特殊含义,它不能按预期工作:子字符串未被识别。所以,我想知道如何整合" +"在上面的RE代码中签名。

非常感谢!

3 个答案:

答案 0 :(得分:3)

+字符具有特殊含义,可以将其转义或将这些字符放在字符类中:

[-+]

如果要匹配所有子字符串,请从正则表达式中删除锚点并考虑此正则表达式:

NSString* expression = @"([-+]?(?:RA|SN|DZ)\\b)"

修改

如果这不起作用,您可以使用以下内容来匹配+字符。

[-\\x2b]

答案 1 :(得分:1)

试试以下正则表达式,

.*?(-|\+)?(RA|SN|DZ).*?

enter image description here

答案 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)匹配三个令牌之一
  • 代码遍历匹配