Onaltılık bir sayı için normal ifade?


114

Bir metindeki onaltılık sayıları algılayan normal bir ifadeyi nasıl oluşturabilirim?

Örneğin, "0x0f4", "0acdadecf822eeff32aca5830e438cb54aa722e3" ve "8BADF00D".


1
Regex gerçekten ayrıştırmaz. Tüm sayı benzeri şeyleri çıkarmayı deneyin ve onaltılık olmayanları eleyin.
— Blender

Yanıtlar:


194

Aşağıdakilere ne dersiniz?

0[xX][0-9a-fA-F]+

0 ile başlayan ifadeyle eşleşir, ardından küçük veya büyük harf x ve ardından 0-9, af veya AF aralığında bir veya daha fazla karakter gelir


35
Bu kısaltılabilir /0x[\da-f]/i, ancak aksi takdirde +1.
— Niklas B.

20
@NiklasB. Steno yalnızca perl regex kullanılıyorsa geçerlidir, POSIX regex kullanıyorsanız, Steven'ın çözümü en kısadır. Her iki durumda da Steven'ın çözümü hem perl hem de POSIX regex için çalışıyor.
— David M. Syzdek

Anladım! Onaltılık sayı 0x veya 0X ile başlıyorsa Steven'ın çözümü iyidir. Bu daha iyi çalışmalıdır: ^ [0-9A-F] + $ Ayrıca, '535GH0G73' gibi onaltılık kalıpları da tanıyabilir, Java için, bunu kontrol etmek için örneğin String.matches () kullanabiliriz .. Yanıtınız için teşekkürler. :)
— saurcery

2
'0x [\ da-f] {2}' sayıyı da sınırlamak daha iyidir
— Yazan Rawashdeh

2
Bu, ikinci ve üçüncü örnek sayılarla, 0acdadecf822eeff32aca5830e438cb54aa722e3 ve 8BADF00D ile eşleşir mi?
— Peter Mortensen

44

Tam sözdizimi, tam gereksinimlerinize ve programlama dilinize bağlıdır, ancak temelde:

/[0-9a-fA-F]+/

veya daha basitçe, ibüyük / küçük harfe duyarlı değildir.

/[0-9a-f]+/i

Ruby kullanacak kadar şanslıysanız şunları yapabilirsiniz:

/\h+/

DÜZENLE - Steven Schroeder'in cevabı, 0x bitini anlamamın yanlış olduğunu fark etmemi sağladı, bu yüzden önerilerimi buna göre güncelledim. Ayrıca 0x ile eşleşmek istiyorsanız, eşdeğerler

/0[xX][0-9a-fA-F]+/
/0x[0-9a-f]+/i
/0x[\h]+/i

DAHA FAZLA EKLENDİ - 0x'in isteğe bağlı olması gerekiyorsa (sorunun işaret ettiği gibi):

/(0x)?[0-9a-f]+/i

Yukarıdaki RE'nin nedenini bana açıklayabilir misin?
— saurcery

4
@noobDroid Özellikle neyi açıklamamı istersiniz?
— SimonMayer

18

Önemli bir şey değil, ancak çoğu normal ifade motoru POSIX karakter sınıflarını destekler [:xdigit:]ve ortak 0-9a-fA-Fşeylerden daha basit olan onaltılık karakterleri eşleştirmek için vardır .

Dolayısıyla, istenen normal ifade (yani isteğe bağlı 0x):/(0x)?[[:xdigit:]]+/



11

Örneklerden biri olan bir MD5'i tespit etmenin aşağıdakilerle yapılabileceğini belirtmekte fayda var:

[0-9a-fA-F]{32}


3

Sadece kayıt için şunu belirtmek isterim:

/^[xX]?[0-9a-fA-F]{6}$/

O da çek o hangi farklılık vardır bir tane var altı geçerli karakterleri ve durumunda küçük veya büyük harf x üzerinde içermesi.


2

Dizenin ortasında belirli bir onaltılık karakter arıyorsanız, "\ xhh" kullanabilirsiniz; burada hh, onaltılık karakterdir. Denedim ve işe yarıyor. C ++ Qt için çerçeve kullanıyorum ancak diğer durumlarda problemleri çözebilir, kullanmanız gereken tada (php, javascript, python, golang, vb.) Bağlıdır.

Bu cevap şu adresten alınmıştır: http://ult-tex.net/info/perl/


Hey! Bu perl için doğru olsa da, tüm programlama dillerinde Normal İfadeler için geçerli görünmüyor. Göre bu \x eşdeğerdir \udiğer dillerde.
— Maurice

"Özel ve" ne demek?
— Peter Mortensen

0

Bu, üçten fazla geçerli çifte sahip olmamanızı sağlar:

(([a-fA-F]|[0-9]){2}){3}

Üçten fazla veya daha az geçerli karakter çifti eşleşmez.


0

Kullanıcı yazabilirsiniz Eğer bir girdi içinde bu ihtiyaç 0ve 0xolmadan da ancak bir altıgen numarası 0xöneki:

^0?[xX]?[0-9a-fA-F]*$

0

Başka bir örnek: css renkleri için onaltılık değerler bir pound işareti veya kare (#) ile başlar, ardından A ve F arasında sayı veya harf olabilen altı karakterdir.

^#[0-9a-fA-F]{6}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.