Value MULTICAST_SOURCE_IP (\*|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
Value MULTICAST_GROUP_IP (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
Value UP_TIME (\S+?)
Value EXPIRATION_TIME (\S+?)
Value RENDEZVOUS_POINT (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
Value FLAGS (\w*)
Value INCOMING_INTERFACE (\S+)
Value REVERSE_PATH_FORWARDING_NEIGHBOUR_IP (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
Value REGISTERING (Registering)
Value List OUTGOING_INTERFACE (\S+)
Value List FORWARD_MODE (Forward\/Sparse|Forward\/Dense)
Value List OUTGOING_MULTICAST_UP_TIME (\S+)
Value List OUTGOING_MULTICAST_EXPIRATION_TIME (\S+?)

Start
  ^\((\*|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}),\s(\*|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\) -> Continue.Record
  ^\(${MULTICAST_SOURCE_IP},\s${MULTICAST_GROUP_IP}\),\s${UP_TIME}\/${EXPIRATION_TIME}(,\sRP\s${RENDEZVOUS_POINT})?,\sflags:\s${FLAGS}
  ^\s+Incoming\sinterface:\s${INCOMING_INTERFACE},\sRPF\snbr\s${REVERSE_PATH_FORWARDING_NEIGHBOUR_IP}(,\s${REGISTERING})?
  ^\s+Outgoing\s+interface\s+list:(?:\s+Null|)\s*$$
  ^\s+${OUTGOING_INTERFACE},\s${FORWARD_MODE},\s${OUTGOING_MULTICAST_UP_TIME}\/${OUTGOING_MULTICAST_EXPIRATION_TIME}\s*$$
  ^\s*$$
  ^IP\s+Multicast\s+(?:Forwarding|Routing)
  ^.*[Ff]lags
  ^\s+\S+\s+-\s+
  ^\s+(?:Timers|Interface\s+state):
  # Capture time-stamp if vty line has command time-stamping turned on
  ^Load\s+for\s+
  ^Time\s+source\s+is
  ^. -> Error
