Das würde deine Definition erfüllen (durch die Verankerung mit ^ und $ kannst du erzwingen, dass der gesamte String gematcht werden muss). Mit Umlauten etc. siehts allerdings schlecht aus
, da würde ich lieber folgendes probieren:
Dein erstes Gegenbeispiel matchen allerdings beide, denn rein von den Zeichen her wäre es ja valide. Du willst wohl eher "ein oder mehrere Wörter, die durch Bindestrich oder Leerzeichen getrennt sind":
Das matcht auch "Hans-Joachüm Maria".