Regex tidak benar-benar mengurai. Coba ekstrak semua hal yang mirip angka dan saring yang bukan hexadecimal.
Blender
Jawaban:
193
Bagaimana dengan berikut ini?
0[xX][0-9a-fA-F]+
Mencocokkan ekspresi yang dimulai dengan 0, diikuti oleh x huruf besar atau kecil, diikuti dengan satu atau beberapa karakter dalam rentang 0-9, atau af, atau AF
Itu bisa disingkat menjadi /0x[\da-f]/i, tetapi sebaliknya, +1.
Niklas B.
20
@Niklas. Singkatan Anda hanya valid jika menggunakan perl regex, jika menggunakan POSIX regex, maka solusi Steven adalah yang terpendek. Bagaimanapun, solusi Steven bekerja untuk perl dan regex POSIX.
David M. Syzdek
Mengerti! Solusi oleh Steven bagus jika angka hex dimulai dengan 0x atau 0X. Yang ini akan bekerja lebih baik: ^ [0-9A-F] + $ Ia juga dapat mengenali pola hex seperti: '535GH0G73' Untuk Java, kita dapat menggunakan misalnya String.matches () untuk memeriksa ini .. Terima kasih teman-teman atas tanggapannya :)
saurcery
2
'0x [\ da-f] {2}' lebih tepat untuk membatasi jumlahnya juga
Yazan Rawashdeh
2
Apakah itu cocok dengan contoh nomor kedua dan ketiga, 0acdadecf822eeff32aca5830e438cb54aa722e3 dan 8BADF00D?
Peter Mortensen
44
Sintaks yang tepat bergantung pada persyaratan dan bahasa pemrograman Anda, tetapi pada dasarnya:
/[0-9a-fA-F]+/
atau lebih sederhananya, imembuatnya peka huruf besar kecil.
/[0-9a-f]+/i
Jika Anda cukup beruntung bisa menggunakan Ruby, Anda bisa melakukan:
/\h+/
EDIT - Jawaban Steven Schroeder membuat saya menyadari bahwa pemahaman saya tentang bit 0x salah, jadi saya telah memperbarui saran saya. Jika Anda juga ingin mencocokkan 0x, padanannya adalah
/0[xX][0-9a-fA-F]+//0x[0-9a-f]+/i/0x[\h]+/i
TAMBAHKAN LEBIH BANYAK - Jika 0x harus opsional (seperti yang tersirat dalam pertanyaan):
@noobDroid Apa yang secara spesifik ingin Anda jelaskan?
SimonMayer
18
Bukan masalah besar, tetapi sebagian besar mesin regex mendukung kelas karakter POSIX, dan ada [:xdigit:]untuk mencocokkan karakter hex, yang lebih sederhana daripada 0-9a-fA-Fhal - hal umum .
Jadi, regex seperti yang diminta (yaitu dengan opsional 0x) adalah:/(0x)?[[:xdigit:]]+/
Jika Anda mencari karakter heksadesimal tertentu di tengah string, Anda dapat menggunakan "\ xhh" di mana hh adalah karakter dalam heksadesimal. Saya sudah mencoba dan berhasil. Saya menggunakan kerangka kerja untuk C ++ Qt tetapi dapat menyelesaikan masalah dalam kasus lain, tergantung pada rasa yang perlu Anda gunakan (php, javascript, python, golang, dll.).
Hei! Meskipun ini mungkin benar untuk perl, tampaknya tidak demikian halnya dengan Ekspresi Reguler di semua bahasa pemrograman. Menurut ini\x setara dengan \udalam bahasa lain.
Maurice
Apa itu "khusus anda"?
Peter Mortensen
0
Yang ini memastikan Anda memiliki tidak lebih dari tiga pasangan yang valid:
(([a-fA-F]|[0-9]){2}){3}
Lebih atau kurang dari tiga pasang karakter yang valid gagal untuk mencocokkan.
Contoh lain: Nilai heksadesimal untuk warna css dimulai dengan tanda pagar, atau hash (#), lalu enam karakter yang bisa berupa angka atau huruf antara A dan F, inklusif.
Jawaban:
Bagaimana dengan berikut ini?
Mencocokkan ekspresi yang dimulai dengan 0, diikuti oleh x huruf besar atau kecil, diikuti dengan satu atau beberapa karakter dalam rentang 0-9, atau af, atau AF
sumber
/0x[\da-f]/i
, tetapi sebaliknya, +1.Sintaks yang tepat bergantung pada persyaratan dan bahasa pemrograman Anda, tetapi pada dasarnya:
atau lebih sederhananya,
i
membuatnya peka huruf besar kecil.Jika Anda cukup beruntung bisa menggunakan Ruby, Anda bisa melakukan:
EDIT - Jawaban Steven Schroeder membuat saya menyadari bahwa pemahaman saya tentang bit 0x salah, jadi saya telah memperbarui saran saya. Jika Anda juga ingin mencocokkan 0x, padanannya adalah
TAMBAHKAN LEBIH BANYAK - Jika 0x harus opsional (seperti yang tersirat dalam pertanyaan):
sumber
Bukan masalah besar, tetapi sebagian besar mesin regex mendukung kelas karakter POSIX, dan ada
[:xdigit:]
untuk mencocokkan karakter hex, yang lebih sederhana daripada0-9a-fA-F
hal - hal umum .Jadi, regex seperti yang diminta (yaitu dengan opsional
0x
) adalah:/(0x)?[[:xdigit:]]+/
sumber
Ini akan cocok dengan atau tanpa
0x
prefiks(?:0[xX])?[0-9a-fA-F]+
sumber
Perlu disebutkan bahwa mendeteksi MD5 (yang merupakan salah satu contohnya) dapat dilakukan dengan:
sumber
Jika Anda menggunakan Perl atau PHP, Anda dapat mengganti
dengan:
sumber
Sebagai catatan, saya akan menentukan yang berikut:
Yang berbeda karena ia memeriksa bahwa ia harus berisi enam karakter yang valid dan pada huruf kecil atau huruf besar x jika kita memilikinya.
sumber
Jika Anda mencari karakter heksadesimal tertentu di tengah string, Anda dapat menggunakan "\ xhh" di mana hh adalah karakter dalam heksadesimal. Saya sudah mencoba dan berhasil. Saya menggunakan kerangka kerja untuk C ++ Qt tetapi dapat menyelesaikan masalah dalam kasus lain, tergantung pada rasa yang perlu Anda gunakan (php, javascript, python, golang, dll.).
Jawaban ini diambil dari: http://ult-tex.net/info/perl/
sumber
\x
setara dengan\u
dalam bahasa lain.Yang ini memastikan Anda memiliki tidak lebih dari tiga pasangan yang valid:
Lebih atau kurang dari tiga pasang karakter yang valid gagal untuk mencocokkan.
sumber
Jika Anda memerlukan ini dalam input di mana pengguna dapat mengetik
0
dan0x
juga tetapi bukan nomor hex tanpa0x
awalan:sumber
Contoh lain: Nilai heksadesimal untuk warna css dimulai dengan tanda pagar, atau hash (#), lalu enam karakter yang bisa berupa angka atau huruf antara A dan F, inklusif.
sumber