繁体   English   中英

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

[英]How to make regexp for multiple condition?

我有如下正则表达式代码(我正在使用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()进行多次检查,这只会给我所有错误的结果,我如何实现呢?

我不熟悉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。
  • \\S匹配任何非空白字符。
  • {12}表示前一个事物必须重复12次,因此\\S{12}表示任何12个非空白字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM