正则表达式&&和&

时间:2013-09-16 06:20:25

标签: regex string split stringtokenizer

请你建议我正则表达式只会匹配'&'来自字符串但不是'&&'。

E.g。输入字符串

s1 = "STRING1 && STRING2 & STRING3 AND STRING4";

我正在用函数 -

拆分输入字符串
String[] param = s1.split('&'); or s1.split('&(?!&&)');

拆分后的结果应为 -

param[1] = STRING1 && STRING2  
param[2] = STRING3 AND STRING4

感谢您的回复。

开发

3 个答案:

答案 0 :(得分:2)

您可以在此处使用正则表达式中的lookaround

(?<!&)&(?!&)

上述正则表达式与&不匹配,也不会跟随另一个&

答案 1 :(得分:1)

您也可以使用此模式:

[^&]&[^&]

并调用某些特定于语言的SPLIT函数可以完成这项工作。

如果这是针对iOS平台的,请在单独的应用中尝试此示例:

NSString *string = @"STRING1 && STRING2 & STRING3 AND STRING4"; //[NSString stringWithFormat:@"%@", @""];

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^&]&[^&]"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];

NSUInteger numberOfMatches = [regex numberOfMatchesInString:string
                                                    options:0
                                                      range:NSMakeRange(0, [string length])];
NSLog(@"numberOfMatches : %d", numberOfMatches);
NSArray *matches = [regex matchesInString:string
                                  options:0
                                    range:NSMakeRange(0, [string length])];

for (NSTextCheckingResult *match in matches) // adjust loop per your criteria
{
    NSRange matchRange = [match range];

    // Pick the separator
    NSLog(@"::::%@", [string substringWithRange:matchRange]);

    // Splitted string array
    NSArray *arr = [string componentsSeparatedByString:[string substringWithRange:matchRange]];

    NSLog(@"Splitted String : %@", arr);
}

答案 2 :(得分:0)

它可能不是很优雅,但我会取代隔离的&amp;为了别的什么,然后我会做分裂。

像这样(伪代码,而不是IOS语法):

// s1 = "STRING1 && STRING2 & STRING3 AND STRING4";
aux=s1.replaceAll("([^&])&([^&])","$1 _SEPARATOR_ $2");
// in case of & at the beginning
aux=aux.replaceAll("^&([^&])"," _SEPARATOR_ $2");
// in case of & at the end
aux=aux.replaceAll("([^&])&$","$1 _SEPARATOR_ ");

// now aux="STRING1 && STRING2  _SEPARATOR_  STRING3 AND STRING4";
String[] params=aux.split(" _SEPARATOR_ ");