如何使正则表达式用于多种条件?

时间:2018-10-12 15:45:41

标签: regex dart flutter

我有如下正则表达式代码(我正在使用VerbalExpression dart插件),我的目的是检查字符串是否以“ 36”开头,后跟“ 01”,“ 02”或“ 03”。之后,只要整个字符串为16个字符长即可。

  var regex = VerbalExpression()
  ..startOfLine()
  ..then("36")
  ..then("01")
  ..or("02")
  ..anythingBut(" ")
  ..endOfLine();
String nik1 = "3601999999999999";
String nik2 = "3602999999999999";
String nik3 = "3603999999999999";

print('result : ${regex.hasMatch(nik1)}');
print('Hasil : ${regex.hasMatch(nik2)}');
print('Hasil : ${regex.hasMatch(nik3)}');

我的代码仅适用于nik1和nik2,但是我想要适用于nik3,我注意到我不能在or()之后放置or()进行多次检查,这只会给我所有错误的结果,我如何实现那?

1 个答案:

答案 0 :(得分:3)

我对VerbalExpression不熟悉,但是执行此操作的RegExp很简单。

const pattern = r'^36(01|02|03)\S{12}$';

void main() {
  final regex = RegExp(pattern);
  print(regex.hasMatch('3601999999999999'));    // true
  print(regex.hasMatch('3602999999999999'));    // true
  print(regex.hasMatch('3603999999999999'));    // true
  print(regex.hasMatch('360199999999999'));     // false
  print(regex.hasMatch('3600999999999999'));    // false
  print(regex.hasMatch('36019999999999999'));   // false
}

模式说明:

  • r前缀意味着dart会将其解释为原始字符串(“ $”和“ \”不被视为特殊字符串)。
  • ^$代表字符串的开头和结尾,因此它将仅匹配整个字符串,而不能仅从部分字符串中找到匹配项。
  • (01|02|03)“ 01”或“ 02”或“ 03”。 |表示OR。将其包装在括号中可使其知道在何处停止OR。
  • \S与任何非空白字符匹配。
  • {12}意味着前一件事必须重复12次,因此\S{12}意味着任何12个非空白字符。