Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
Dart RegExp不返回匹配项_Dart - Fatal编程技术网

Dart RegExp不返回匹配项

Dart RegExp不返回匹配项,dart,Dart,我有一个经过测试的正则表达式来拆分字符串中的,分隔短语,除非,在括号中 在带有ECMAScript风格的中使用此字符串测试正则表达式,可以得到所需的匹配项。在我的Dart版本中没有打印匹配项 非常感谢您的指导 void main() { String s = """Joe's Jazz Band (Ensemble), Fred Dagg (Guitar), Tommy Tucker (Horn, Clarinet), The Pied Piper (Whistle)"""; RegEx

我有一个经过测试的正则表达式来拆分字符串中的
分隔短语,除非
在括号中

在带有ECMAScript风格的中使用此字符串测试正则表达式,可以得到所需的匹配项。在我的Dart版本中没有打印匹配项

非常感谢您的指导

void main() {
  String s = """Joe's Jazz Band (Ensemble), Fred Dagg (Guitar), Tommy Tucker (Horn, Clarinet), The Pied Piper (Whistle)""";
  RegExp re = RegExp(r'([^,(]*\([^)]*\))*[^,]*(,|$)');

  List li = s.split(re);
  print('$li');
}
我的Dart代码打印
[,,]

我希望它能打印:
[“乔的爵士乐队(合奏)”,“弗雷德·达格(吉他)”,“汤米·塔克(号角、单簧管)”,“彩笛手(哨子)”,

正如@attdona split所说的那样,不返回匹配项,因此如果你想获得匹配项,请使用类似的方法:

void main() {
  String s = """Joe's Jazz Band (Ensemble), Fred Dagg (Guitar), Tommy Tucker (Horn, Clarinet), The Pied Piper (Whistle)""";
  RegExp re = RegExp(r'([^,(]*\([^)]*\))*[^,]*(,|$)');

  List l = re.allMatches(s).toList();
  List<String> li = new List();
  for(Match e in l) {
    li.add(e.group(0));
  }

  print('$li');
}
void main(){
弦乐s=“”“乔的爵士乐队(合奏)、弗雷德·达格(吉他)、汤米·塔克(号角、单簧管)、彩笛手(口哨)”;
RegExp re=RegExp(r'([^,(]*\([^)]*\)*[^,]*(,|$));
List l=re.allMatches.toList();
List li=新列表();
for(l中匹配e){
添加(e组(0));
}
印刷品(“$li”);
}
不返回匹配项,但在模式匹配项处拆分字符串并返回子字符串列表

假设分隔符是一个
括号,后跟零个或多个空格和一个逗号,这适用于拆分:

void main() {
  String s = """Joe's Jazz Band (Ensemble), Fred Dagg (Guitar), Tommy Tucker (Horn, Clarinet), The Pied Piper (Whistle)""";
  RegExp re = RegExp(r'\)[ \t]*,');

  Iterable li = s.split(re).map((item) => item.endsWith(")") ? item.trim() : "$item)".trim());

  li.forEach((item) => print('$item'));

}
请注意,有必要在最后拆分的元素处添加一个

如果不想删除前导空格和尾随空格,则不需要使用
trim()

所以基本上我们通过正则表达式来表示拆分原始字符串的char/string?是的,没错。在这种情况下,它正确地返回
[,,]
@altdona感谢您的回复,但我仍然没有得到它。另外,Dartpad报告RE:Uncaught exception:FormatException:Invalize RegExp模式(语法错误:无效正则表达式:/)[t]*,/:Unterminated character class][t]*,很抱歉,这是一个打字错误:我为制表符编写了t\而不是
\t
。可能我不理解术语“匹配”。在[,,]中,子字符串的长度为0-那么为什么这是正确的?谢谢@Denis Sablukov。你的代码最适合我的需要。(不幸的是,我不能同时接受这两个答案。)