Tal y como ha puesto la expresión regular Darkgold9, reconocerías cadenas del tipo:
hola---que___tal?
Sí quieres reconocer cadenas como las que has puesto en el primer post la expresión regular debería ser así:
Y te explico un poco el por qué.
Según las cadenas de ejemplo que has puesto, todas deben comenzar por un caracter de
\w, por tanto, hay que poner a la fuerza esto:
\w+ con eso estamos reconociendo cadenas que contengan una o más letras o dígitos (sí mal no recuerdo \w incluía también los dígitos pero no estoy seguro). A continuación puede venir, o un guión bajo, o un guión normal y corriente, por tanto eso debe expresarse mediante el operador unión
|. Por tanto la parte de la expresión:
(-|_)* representa las cadenas de guiones y guiones bajos.
Por último todo lo anterior se junta y se le pone un *, para especificar que todo eso debe aparecer cero o más veces. Para terminar se le añade un \w+ para que reconozca las cadenas que terminen con alguna sucesión de \w.
Espero que lo hayas entendido.
Para los próximos posts intenta escribirlos de una forma más limpia y con menos faltas a la hora de escribir.
Saludos y suerte.