我正在尝试制作一个公式 miniparser,输出应该是 5 组:
(1)(2)(3)(4)(5)
有 3 个可能的选项:
如果在字母大写之后,那么它后面可以跟'w',在这种情况下第二组是空的:
([2-3]?)()([ACD]{1})([w]?)([2']?)在第二种情况下,第二组和第四组总是空的:
([2-3]?)()([acd]{1})()([2']?)如果一开始有 2 位数字,则必须通过 '-' 并且第一个数字一定小于第二个数字......即 在这里,您需要以某种方式从可能的选项中排除选项“3-3”。在这种情况下,第四组始终为空。
([2-3]{1})-([3-5]{1})([acd]{1})()([2']?)
如何将这三个规则组合成一个公式?也许可以写得更紧凑一些?
基于捕获子模式编号重置的组对 PCRE 表达式进行轻微优化看起来像
查看表达式如何在线工作的示例。
细节
(?<![^ ,\n])- 在当前位置之前不能有除空格、逗号或换行符以外的字符(?|- 具有子模式编号重置的组:([23]?)()([MSEURFBDL])(w?)|- 可选数字2或3(#1)、空字符串 (#2)、字母M,S,E,U,R,F,BorD(L#3) 和可选字母w(#4)([2-5]?)()([mseurfbdl])()|- 可选数字从2到5(#1)、空字符串 (#2)、字母m,s,e,u,r,f,b,dorl(#3) 和空字符串 (#4)(?|(2)-([3-5])|(3)-([45]))([mseurfbdl])()- 数字2(#1)、连字符、从3到的数字5(#2) OR (#1) 、连字符、3数字4或(5#2)、字母、、、、、、、或(m# 3 )和空字符串 (#4)seurfbdl)- 第一组结束([2']?)- 第 5 组:可选字符2或'(?![^, \n])- 在当前位置之后不应有除空格、逗号或换行符以外的字符。