Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex &&;及;_Regex_String_Split_Stringtokenizer - Fatal编程技术网

Regex &&;及;

Regex &&;及;,regex,string,split,stringtokenizer,Regex,String,Split,Stringtokenizer,您能给我推荐一个正则表达式吗?它只匹配字符串中的“&”,而不匹配“&&” 例如,输入字符串 s1 = "STRING1 && STRING2 & STRING3 AND STRING4"; 我正在用函数拆分输入字符串- String[] param = s1.split('&'); or s1.split('&(?!&&)'); 拆分后的结果应为- param[1] = STRING1 && STRING2 para

您能给我推荐一个正则表达式吗?它只匹配字符串中的“&”,而不匹配“&&”

例如,输入字符串

s1 = "STRING1 && STRING2 & STRING3 AND STRING4";
我正在用函数拆分输入字符串-

String[] param = s1.split('&'); or s1.split('&(?!&&)');
拆分后的结果应为-

param[1] = STRING1 && STRING2  
param[2] = STRING3 AND STRING4
谢谢你的回复

Dev

您可以在这里使用regex中的

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

上面的正则表达式与一个
&
匹配,前面或后面都没有另一个
&

您也可以使用此模式:

[^&]&[^&]
调用某种特定于语言的
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);
}

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

类似这样的代码(伪代码,而不是IOS语法):


请说明并标记您在问题中使用的语言。由于
NSRegularExpression
,我希望使用iOS平台。很抱歉标记错误,但图片中没有iOS内容。除此之外,我还有一个疑问,如果输入字符串为---->STRING1&&STRING2&STRING3,在这种情况下,我的站点上的这个正则表达式失败了。您可以吗帮帮我?@DevendraW,在我这边可以很好地工作。字符串在
&
被拆分为
STRING1&&STRING2 | STRING3
。输入字符串-STRING1&&STRING2 | STRING3应该拆分为1.STRING1&&2.STRING2 | STRING3它不工作,因为它选择从哪个“&&&&&STRING2”拆分?我希望第三个用于拆分。你知道吗有任何其他正则表达式的建议吗?明白了-正则表达式应该是-(?@DevendraW,我的意思是输入
STRING1&&STRING2&STRING3
将被拆分为(1)
STRING1&&STRING2
和(2)`STRING3
| `仅用于显示不同的部分。)我假设
&&&
是作为数据的一部分出现的,并且不是一个可以拆分的运算符。我不确定您在这里解析的到底是什么,因此目前无法推荐更好的正则表达式。
// 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_ ");