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.