我有一个有团体的模式。这些组都是可选的。
完整的可能模式是:
==A=B++C+D#E-F-F-F-F-F-F-F-F-F-F
但也可以这样看
==A=B++C+D#E-F-F-F-F-F-F-F-F-F-F
==A.A++C.C+D.D-F
=B++C-F
++C+F-F-F
不可能在小组中获得确定者,例如(A组不是' ='可能)。
所以我尝试了这些正则表达式:
(.*)?\=\=(.*)?\=(.*)?\+\+(.*)?\+(.*)?\#(.*)?\-(.*)
问题:
我的错是什么?
答案 0 :(得分:1)
我会通过构建每个阶段来解决这个问题,因此,您的“A”组以==
开头,不能包含=
,因此该部分可以与==[^=]+
匹配,但是整个群组都是可选的,因此我将其用作(==[^=]+)?
,将相同的主体应用于您的“B”群组,该群组以单个=
开头,且不能包含+
会给出一个(=[^+]+)?
的可选组,在你所有的小组中工作最终会给出类似的东西:
(==[^=]+)?(=([^+]+))?(\+\+([^+]+))?(\+([^#]+))?(#([^-]))?(\-(.*))?
我已假设任何给定组中不允许的字符,并且还假设每个组都是可选的(因此空字符串匹配),并且没有组需要先前的组(因此它对D有效)可以在没有C)的情况下出现 - 这些假设可以通过额外的分组或调整字符类来纠正,因此,例如,以下内容允许单独的F组(如果您正在分析数据,这可能很方便)
(==[^=]+)?(=([^+]+))?(\+\+([^+]+))?(\+([^#]+))?(#([^-]))?(\-([^-]))*