Você obtém um sucesso porque a regex corresponde a uma parte dela.
Se você quiser uma correspondência exata , será necessário ancorar o padrão no início e no final da linha: regex="^lo(lo)+ba$"
- o
^
significa o início da string: nada pode ser antes do padrão - o
$
representa o final da string: nada pode ser depois
Em seu código original, como o padrão não está ancorado, a correspondência de padrões não se importa com o que poderia ser antes de depois, se pelo menos uma parte da sequência valida o padrão.