Prueba esto:
(?:[\w\-](?<!_))+
No un partido simple en cualquier cosa que se codifica como una \ w (o un guión) y luego tiene una búsqueda hacia atrás de anchura cero que asegura que el personaje que estaba emparejado no es un guion bajo
de lo contrario podría recoger este:
(?:[^_\W]|-)+
que es un enfoque más basado en el set (nótese la mayúscula W)
bien, tuve un montón de diversión con Unicode en el sabor de php de PCREs: D Peekaboo dice que hay una solución simple disponibles:
[\p{L}\p{N}\-]+
\ p {L} coincide con unicode nada de lo que califica como una carta (nota: no es un carácter de palabra, por lo tanto, no se subraya), mientras que \ p {N} coincide con cualquier cosa que se parece a un número (incluidos los números romanos y cosas más exóticas).
\ - es solo un guion escapado. Aunque no es estrictamente necesario, tiendo a hacer un punto de escapar de guiones en las clases de caracteres ... Tenga en cuenta, que hay docenas de diferentes guiones en Unicode, lo que daría lugar a la siguiente versión:
[\p{L}\p{N}\p{Pd}]+
Donde " Pd "es Punctuation Dash, que incluye, pero no se limita a, nuestro minus-dash-thingy. (Nota: de nuevo, no hay guiones bajos aquí).
Sea específico con respecto a las "letras UTF-8": ¿puede confirmar que no solo desea caracteres en inglés? –
@meder: quiero caracteres ** y ** acentuados/extranjeros en inglés. –