Pertanyaan RegEx: \ w - "_" + "-" di UTF-8


Saya perlu ekspresi reguler yang cocok dengan huruf UTF-8 dan digit, tanda tanda hubung (-) tetapi tidak cocok dengan garis bawah (_), Saya mencoba upaya konyol ini tanpa hasil:

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

Itu \w adalah singkatan untuk [A-Za-z0-9_], tetapi juga cocok dengan karakter UTF-8 jika saya punya u pengubah set.

Adakah yang bisa membantu saya dengan yang satu ini?


13
2018-01-14 04:31


asal


Jawaban:


Coba ini:

(?:[\w\-](?<!_))+

Ini melakukan pencocokan sederhana pada apa pun yang dikodekan sebagai \ w (atau tanda hubung) dan kemudian memiliki tampilan lebar nol yang memastikan bahwa karakter yang baru saja dicocokkan bukan merupakan garis bawah.

Kalau tidak, Anda bisa memilih yang ini:

(?:[^_\W]|-)+

yang merupakan pendekatan berbasis-set (perhatikan huruf besar W)

OK, saya bersenang-senang dengan unicode dalam rasa PCREs php: D Peekaboo mengatakan ada solusi sederhana yang tersedia:

[\p{L}\p{N}\-]+

\ p {L} cocok dengan apa saja unicode yang memenuhi syarat sebagai Surat (catatan: bukan karakter kata, sehingga tidak ada garis bawah), sementara \ p {N} cocok dengan apa pun yang terlihat seperti angka (termasuk angka romawi dan hal-hal yang lebih eksotis).
\ - hanya dash yang lolos. Meskipun tidak benar-benar diperlukan, saya cenderung menjadikannya sebuah titik untuk menghindari garis-garis di kelas karakter ... Perhatikan, bahwa ada lusinan garis-garis yang berbeda dalam unicode, sehingga memunculkan versi berikut:

[\p{L}\p{N}\p{Pd}]+

Di mana "Pd" adalah Tanda Baca, termasuk, tetapi tidak terbatas pada minus-dash-thingy kami. (Perhatikan, lagi tidak ada garis bawah di sini).


18
2018-01-14 04:50



Saya tidak yakin bahasa apa yang Anda gunakan, tetapi dalam PERL Anda hanya dapat menulis: [[: alnum:] -] + ketika lokal yang benar ditetapkan.


3
2018-01-14 05:33