Já está a funcionar... já tinha perdido 2 ou 3 horas à procura do bug no fim de semana passado... afinal nada mais simples do que alterar o regex.. bastou trocar o W- por W\- nesta linha
callback('|\[K=(\w+)(?:\:([\w\-_]+))?\]|
Peço desculpa pelo transtorno!!!