Bu deneyin:
(?:[\w\-](?<!_))+
Bir \ w (veya tire) olarak kodlanan şey basit bir maç yapar ve sonra sadece eşleşti karakteri bir çizgi olmadığını sağlayan sıfır genişlik Geriye bakan vardır.
Aksi takdirde bu bir seçim olabilir:
(?:[^_\W]|-)+
Daha set-tabanlı yaklaşım (büyük harf W not) olan
OK, I had a lot of fun with unicode in php's flavor of PCREs :D
Peekaboo says there is a simple solution available:
[\p{L}\p{N}\-]+
\p{L} matches anything unicode that qualifies as a Letter (note: not a word character, thus no underscores), while \p{N} matches anything that looks like a number (including roman numerals and more exotic things).
\- is just an escaped dash. Although not strictly necessary, I tend to make it a point to escape dashes in character classes... Note, that there are dozens of different dashes in unicode, thus giving rise to the following version:
[\p{L}\p{N}\p{Pd}]+
"Pd" de dahil olmak üzere, ama bizim eksi-dash zımbırtısının sınırlı değildir Noktalama Dash, nerede. (Burada yine hiçbir çizgi Not).