2008-10-06 10 views
7

Kayan noktalı ondalık sayıları normal bir ifadeyle eşleştirmeye çalışıyorum. Ondalıktan önce bir sayı olabilir veya olmayabilir ve ondalık mevcut olabilir ya da olmayabilir ve mevcutsa bundan sonra rakam olabilir ya da olmayabilir. (Bu uygulama için, önde gelen +/- veya takip eden bir "E123" ye izin verilmez). Doğru Aşağıdaki maçlarıNormal ifadedeki iki alt ifadeden en az birinin eşleşip eşleşmediğini nasıl kontrol edebilirim?

/^([\d]*)(\.([\d]*))?$/ 

:

1 
1. 
1.23 
.23 

Ancak bu da boş dize ya da ben istemiyorum sadece ondalık noktasının bir dize, kibrit bu regex yazdım.

Şu anda 1 $ veya 3'ün uzunluğu 0'dan büyük olan normal ifadeyi çalıştırdıktan sonra denetliyorum. Değilse, geçerli değil. Bunu doğrudan regex'te yapabileceğim bir yol var mı?

+0

eşleşen yardımcı olacaktır Java'da, ama ben burada Perl'in sanki Java'nın regex motoru olduğu için buraya gönderiyorum insanın dürüstlüğüne bir hakarettir. – Kip

cevap

6

Bu, istediğiniz şeyi yapacağını düşünüyorum. Ya bir basamakla başlar, bu durumda ondalık sayı ve basamaklar isteğe bağlıdır veya ondalık bir nokta ile başlar, bu durumda en az bir basamak zorunludur.

/^\d+(\.\d*)?|\.\d+$/ 
+0

Üzgünüz regex motoru desteklemiyor +? + Desteklendiğinden emin olsaydınız, kodu değiştirebilme özgürlüğünü aldım. –

+0

Grep, sed ve ed'in bazı versiyonlarını düşünüyordum, ancak orijinal poster muhtemelen daha yeni bir şey kullanıyor. GNU araçlarını kullanmayan Unix sistemleriyle başlayan insanlarda göreceğiniz alışkanlıklardan biri. Ayrıca zcat'i -z seçeneği yerine katran için de kullanıyorum. – Glomek

0

Her bir durum için düzenli bir ifade ve VEYA bunları oluşturun. Sonra ifadenin eşleşmesi durumunda sadece sınava ihtiyacınız var.

/^(\d+(\.\d*)?)|(\d*\.\d+)$/ 
1

Çok geç cevap, ama ister regular-expressions.info

[-+]?[\d]*\.?[\d]+? 

Güncelleme alınan, cevap Bu [\d]*\.?[\d]+?|[\d]+\. sen aslında yapıyorum 1.

http://regex101.com/r/lJ7fF4/7

+0

Uygulamamda geçerli olduğunu düşünmem gereken "1." ile eşleşmiyor. – Kip

+0

@Kip cevabımı –

+0

şimdi güncelledim orijinal regex'mi yazdınız. :) çözdüğüm şey olan boş dizgeyle ve "." ile eşleşiyor. Bir "ya da" koşulu olmadan mümkün olduğunu sanmıyorum. – Kip