RegEx: \ w - "_"

2 Cevap php

UTF-8 harf ve rakam, tire işareti (-) eşleşir ancak çizgi (_), Ben başarı olmadan bu saçma girişimleri çalıştı uymuyor normal bir ifade gerekir:

  • ([\w-^_])+
  • ([\w^_]-?)+
  • (\w[^_]-?)+

\w [A-Za-z0-9_] için kısaltmadır, ama ben u değiştirici dizi varsa o da UTF-8 karakter ile eşleşir.

Herkes bu konuda bana yardımcı olabilir misiniz?

2 Cevap

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).

Ben hangi dilde kullandığınız emin değilim, ama PERL sadece yazabilirsiniz: [[: alnum:] -] + doğru yerel ayarlandığında.