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