Hmm. Je suis en train de penser à quelque chose, peut-etre que ca te conviendrait. Tu pourrais peut-être wrapper ta règle entity pour s’assurer qu’elle n’apparaisse qu’une fois.
Ton premier pattern (pour execute) devrait seulement matcher une ligne, donc…
begin: ^execute
end: $
include: entityOnce
include: .* // invalid chars
Puis, entityOnce est définit comme suit…
begin: (?=\s+@[apre]\[.*\]\s*(\sdetect)?\s*$)
end: $
include: entity
Donc l’idée est que ta règle définit comme begin une assertion positive lookahead qui match une seule fois dans la ligne un skelette de entity.
Le problème, c’est que ca match tout ou rien… Hmm.
EDIT: tu pourrais brisé entity en plusieurs règles qui s’incluent une après l’autre 
