php preg_replace, ben bir nokta sonra her şeyi değiştirmek gerekir (örneğin, 340,38888> 340 temiz almak gerekir)

4 Cevap php

Ben bir nokta sonra her şeyi değiştirmek gerekir. Ben regex ile yapılabilir biliyorum ama ben hala acemi ve ben bu yüzden bana yardım lütfen uygun sözdizimi anlamıyorum.

Ben feryat kod çalıştı ama çalışmıyor:

  $x = "340.888888";
$pattern = "/*./"
 $y = preg_replace($pattern, "", $x);
print_r($x);

thanks , Michael

4 Cevap

Ben yanlış olabilir, ama bu fazlasıyla olmayan çivi şeklindeki sorunun RegEx çekiç kullanarak gibi geliyor. Eğer sadece pozitif bir kayan nokta sayısını kesmek için çalışıyorsanız, kullanabileceğiniz

$x = 340.888888;
$y = floor($x);

Edit: Techpriester yorumuna işaret ettiği gibi, bu her zaman (yani -3.5 -4 olur) aşağı yuvarlamak olacaktır. İstediğin değil, sadece $y = (int)$x gibi bir döküm kullanabilirsiniz.

Ayrıca yapabilirdi ...

$x = "340.888888";
$y = current(explode(".", $x));

Daha önce başkaları tarafından belirtildiği: Bir sayının tamsayı kısmını almak için daha iyi yollar vardır.

Bazı regex öğrenmek istiyorum çünkü bu soruyorsun Ancak, burada bunu yapmak için nasıl:

$x = "340.888888";
$y = preg_replace("/\..*$/", "", $x);
print_r($y);

Regex \..*$ anlamı:

\.    # match the literal '.'
.*    # match any character except line breaks and repeat it zero or more times
$     # match the end of the string

. regex "(yeni satır dışında) herhangi bir karakter anlamına gelir. Aslında bir nokta eşleştirmek için, \. gibi kaçmak gerekir.

* kendisi tarafından geçerli değil. Bu model "x" tekrar sıfır ya da daha fazla kez, yani x* olarak görünmelidir. Sizin durumda, \d kullanılan bir rakamı, maç gerekir.

Ayrıca, Foo 123 olarak Foo... 123.456 olarak değiştirin istemem. Haneli ≥ 1 kez görünmelidir. A + yerine * içinde kullanılmalıdır.

Yani yedek olmalı

$y = preg_replace('/\\.\\d+/', "", $x);

(Kesecek ve numarayı sağlamak için 123.456, .456, bir Geriye İlerleme kullanmayın şeklinde değildir.

$y = preg_replace('/(?<=\\d)\\.\\d+/', "", $x);