我有如下所示的regexp代码(我使用的是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为真,我注意到不能将或()后面或()作为多个检查,它只会给我所有的错误结果,如何实现呢?
发布于 2018-10-12 19:05:01
我不熟悉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个非空格字符。https://stackoverflow.com/questions/52782942
复制相似问题