2016-03-22 11 views
4

Bir dizenin bir sayı ile bitip bitmediğini nasıl kontrol edebilirim ve doğruysa, sayıyı bir diziye (örneğin) itin?Dizginin sayı ile bitip bitmediğini kontrol edin ve doğruysa, sayı

$mystring = "t123"; 

$ret = preg_match("/t[0-9+]/", $mystring); 
if ($ret == true) 
{ 
    echo "preg_match <br>"; 
    //Now get the number 
} 
else 
{ 
    echo "no match <br>"; 
} 

en tüm dizeleri harfi t ile başlar ve örneğin bir sayı ile birleştirilmiş olan varsayalım: Ben bunu böyle çözülür, bir dize bir sayı ile biterse nasıl kontrol edeceğinizi biliyorum t1, t224, t353253 ...

Ancak bir tane varsa bu numarayı nasıl çıkarabilirim? Kod örneğimde dizenin sonunda 123 var, bunu nasıl kesebilirim ve örneğin array_push ile bir diziye itebilirim?

cevap

2
$number = preg_replace("/^t(\d+)$/", "$1", $mystring); 
if (is_numeric($number)) { 
    //push 
} 

çıktı. Basitçe sayısal ise, sizin diziye

Numune itin olmadığını kontrol edin: https://3v4l.org/lYk99

DÜZENLEME:

Sadece bu bu t123t225 gibi dize çalışmaz farkındayız. Bu vakayı desteklemeniz gerekiyorsa, şu kalıbı kullanın: /^t.*?(\d+)$/. Bu sayede, t ve sayı arasındaki her şeyi göz ardı ederek, sayı ile birlikte ne olursa olsun yakalamaya çalışır ve t ile başlamalıdır.

Örnek: https://3v4l.org/tJgYu

+0

Büyük yanıt thx. Hayır, dizeler bu kadar "t123" gibi. Ama diğer varyantı nasıl çözeceğine dair bilgi verdiğiniz için teşekkür ederim. – Black

1

Sen eşleşmeleri almak için preg_match'in gelen 3 param kullanmalı ve orada sayı ve bu gibi regex değiştirmelisiniz: ([0-9]+)

Yani kod aşağıdaki gibi görünmelidir:

$mystring = "t123"; 

$ret = preg_match("/([0-9]+)/", $mystring, $matches); 
if ($ret == true) 
{ 
    print_r($matches); //here you will have an array of matches. get last one if you want last number from array. 
    echo "prag_match <br>"; 
} 
else 
{ 
    echo "no match <br>"; 
} 
2

ilk senin regex (bir yazım hatası olabilir) biraz yanlış - ama sorunuzun cevabı bir olan ileriye dönük ve şöyle bir maç dizi kullanabilirsiniz:

$test = 't12345'; 

if(preg_match('/(?<=t)(\d+)/', $test, $matches)){ 

    $result = $matches[0]; 

    echo($result); 
} 
1

preg_match işlevine bir tane daha parametre ekleyin ve herhangi bir dizenin sonundan sayı almak için aynı başka bir normal ifade önermek istiyorum.

$array = array(); 
$mystring = "t123"; 

$ret = preg_match("#(\d+)$#", $mystring, $matches); 


array_push($array, $matches[0]); 

$mystring = "t58658"; 

$ret = preg_match("#(\d+)$#", $mystring, $matches); 

array_push($array, $matches[0]); 

$mystring = "this is test string 85"; 

$ret = preg_match("#(\d+)$#", $mystring, $matches); 

array_push($array, $matches[0]); 

print_r($array); 

Bu, sondaki numarasını vermelidir

Array 
(
    [0] => 123 
    [1] => 58658 
    [2] => 85 
)