Dart正则表达式:如何精准匹配特定number模式并排除误匹配
Dart正则表达式匹配指定场景的解决方案
问题分析
你需要匹配三类字符串:
- 精确等于
number的字符串 number前后带有下划线的字符串(如hey_number、number_hey、hey_number_hey)- 需排除
hey_numbers、hey_numberrr这类number后接其他字符的情况
原正则(^number$)|(.*[_]{1}number.*)|(.*number[_]{1}.*)的问题在于:.*[_]number.*会无限制匹配number之后的任意字符,导致hey_numbers这类字符串被误匹配。
正确正则表达式
使用带边界限制的正则,确保number的前后只能是下划线或字符串首尾:
RegExp validNumberPattern = RegExp(r'^(?:number|.*_number(?=_|$)|(?<=^|_)number.*)$');
正则拆解
^/$:匹配字符串的开头和结尾,确保整串匹配(?:...):非捕获分组,用于整合匹配规则number:精确匹配整个字符串为number的情况.*_number(?=_|$):匹配任意字符后接_number,且number之后必须是下划线或字符串结尾(通过正向预查(?=_|$)限制,避免number后接其他字符)(?<=^|_)number.*:匹配number之前是字符串开头或下划线,之后接任意字符(通过反向预查(?<=^|_)限制,避免number前接非下划线字符)
测试验证
- 匹配成功的案例:
number、hey_number、number_hey、hey_number_hey - 匹配失败的案例:
hey_numbers、hey_numberrr、xnumber、numberx
内容的提问来源于stack exchange,提问作者ajdklgkadnfg
相关产品推荐
相关产品推荐

