我目前有以下正则表达式
ZL[^0-9].{16}_.{3}PAD_N.{26}\.PIC
与类似的文件名匹配
ZLF_1177_0771428479_534PAD_N0530130SALP09217_1100LMV01.PIC
但想更改正则表达式,以便位置
SALP09217
处的 9 个字符
无法接受范围
SALP00000-00899, SALP01000-03099 and SALP05000-06999
以下正则表达式部分有效
ZL[^0-9].{16}_.{3}PAD_N.{7}(?!(SALP00[0-8][0-9][0-9])|(SALP0[1-3]0[0-9][0-9])|(SALP0[5-6][0-9][0-9][0-9])).*\.PIC
但将允许大于原始正则表达式允许的字符串。例如它允许
ZLF_1177_0771428479_534PAD_N0530130SALP09217_1100LMV01.PIC
这是正确的,但也
ZLF_1177_0771428479_534PAD_N0530130SALP09217_1100LMV01LARGER.PIC
这不是
“理想”的正则表达式是
ZL[^0-9].{16}_.{3}PAD_N.{7}(?!(SALP00[0-8][0-9][0-9])|(SALP0[1-3]0[0-9][0-9])|(SALP0[5-6][0-9][0-9][0-9])).{10}\.PIC
但是
ZLF_1177_0771428479_534PAD_N0530130SALP09217_1100LMV01.PIC
不会匹配。
有什么建议吗?
你可以使用
ZL[^0-9].{16}_.{3}PAD_N.{7}(?!SALP0(?:0(?:0{0,2}[0-9]|0?[1-9][0-9]|[1-8][0-9]{2})|(?:100[0-9]|10[1-9][0-9]|1[1-9][0-9]{2}|2[0-9]{3}|30[0-9]{2})|(?:500[0-9]|50[1-9][0-9]|5[1-9][0-9]{2}|6[0-9]{3}))).{19}\.PIC
请参阅 正则表达式演示。
如果当前位置右侧紧邻 SALP00000-00899、SALP01000-03099 和 SALP05000-06999 范围,则
(?!SALP0(?:0(?:0{0,2}[0-9]|0?[1-9][0-9]|[1-8][0-9]{2})|(?:100[0-9]|10[1-9][0-9]|1[1-9][0-9]{2}|2[0-9]{3}|30[0-9]{2})|(?:500[0-9]|50[1-9][0-9]|5[1-9][0-9]{2}|6[0-9]{3})))
负向前视会使匹配失败。
注:
SALP00(?:0{0,2}[0-9]|0?[1-9][0-9]|[1-8][0-9]{2})
匹配 SALP00000-00899,SALP0(?:100[0-9]|10[1-9][0-9]|1[1-9][0-9]{2}|2[0-9]{3}|30[0-9]{2})
匹配 SALP01000-03099 和 SALP0(?:500[0-9]|50[1-9][0-9]|5[1-9][0-9]{2}|6[0-9]{3})
匹配 SALP05000-06999。.{26}
模式分为 .{7}
和 .{19}
以使前瞻工作。