Spróbuj tego:
(?:[\w\-](?<!_))+
To nie prosty mecz o wszystko, co jest zakodowany jako \ W (lub myślnikiem), a następnie ma zerowej szerokości lookbehind, który zapewnia, że postać, która została właśnie dopasowane nie jest podkreśleniem.
przeciwnym razie można wybrać ten jeden:
(?:[^_\W]|-)+
który jest podejście bardziej ustawić oparte (zwróć uwagę na wielkie litery W)
OK, miałem dużo zabawy z unicode w smaku PHP z PCREs: D Peekaboo mówi, że nie jest to proste rozwiązanie dostępne:
[\p{L}\p{N}\-]+
\ p {L} pasuje coś Unicode, który kwalifikuje jako list (uwaga: nie znak słowny, w związku z tym bez podkreśleń), podczas gdy \ p {N} pasuje do wszystkiego, co wygląda jak liczba (w tym cyfry rzymskie i bardziej egzotyczne rzeczy).
\ - jest tylko ucieczką. Chociaż nie jest to bezwzględnie konieczne, staram się uczynić z niego punkt ucieczki kreski w klasach znaku ... Zauważ, że istnieją dziesiątki różnych kresek w Unicode, co daje podstawy do następującej wersji:
[\p{L}\p{N}\p{Pd}]+
Gdzie " Pd "to znak interpunkcyjny, w tym między innymi nasz minus-kreska. (Uwaga, znowu nie podkreślenia tutaj).
Proszę określić "litery UTF-8" - czy możesz potwierdzić, że chcesz nie tylko angielskich znaków? –
@meder: Chcę angielskie ** i ** znaki akcentowane/obce. –