1

您能否建议我只匹配字符串中的“&”而不匹配“&&”的正则表达式。

例如输入字符串

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

我正在用函数拆分输入字符串 -

String[] param = s1.split('&'); or s1.split('&(?!&&)');

拆分后的结果应该是 -

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

谢谢您的回复。

开发

4

3 回答 3

2

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

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

上面的正则表达式匹配一个&既不在另一个之前也不在其后的&

于 2013-09-16T06:27:37.053 回答
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);
}
于 2013-09-16T07:30:23.743 回答
0

它可能并不优雅,但我会将孤立的 & 替换为其他东西,然后我会进行拆分。

像这样的东西(伪代码,而不是 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_ ");
于 2014-02-01T19:55:12.747 回答