正则表达式匹配问题:指定起止符间14字符匹配异常求助
问题分析
你的正则(02A1)[0-9A-Z]{14}(03)之所以错误匹配目标字符串,是因为它只检查了02A1和03之间恰好有14个字符,但允许这14个字符中包含02A1或03这类你不想出现的子串。
看你给出的错误匹配案例:02A103EEFFFFF702A103,第一个02A1之后的14个字符是03EEFFFFF702A1,后面正好跟着03,完全符合正则的长度要求,所以被错误匹配了。
解决办法
要避免中间的14个字符里出现02A1或03,可以用负向预查来限制每个字符的后续内容,确保不会出现你设定的起始/结束标记:
(02A1)(?:(?!02A1|03)[0-9A-Z]){14}(03)
解释:
(?!02A1|03)是负向预查,确保当前位置之后不会出现02A1或03(?:...)是非捕获组,把预查和字符匹配打包成一个单元{14}要求这个单元重复恰好14次,保证中间正好14个符合要求的字符
这样修改后,只有当02A1和03之间的14个字符完全不包含02A1或03时,才会被匹配,就不会出现你遇到的错误情况了。
内容的提问来源于stack exchange,提问作者Alex Bäumler
相关产品推荐
相关产品推荐

