Benim dize bu kısmını soymak nasıl?

4 Cevap
 $string = "Hot_Chicks_call_me_at_123456789";

Ben sadece yukarıda dizesindeki son harfinden sonra numberst var ki nasıl uzakta şerit olabilir?

Örnek, ben (geçen altını çizmektedir sayıyla) bir dize denetleyin ve önündeki her şeyi kaldırmak için bir yol gerekir

Bunun için herhangi bir akıllı çözümler?

Teşekkürler

BTW, PHP bulunuyor!

4 Cevap

Normal bir ifade kullanarak olmadan

$string = "Hot_Chicks_call_me_at_123456789";
echo end( explode( '_', $string ) );

Her zaman bir dizi biterse sadece /(\d+)$/ regex, biçimlendirme tutarlı maç? Tire veya boşluk gibi sayılar arasında bir şey var mı?

Sen regex kısmı için preg_match kullanabilirsiniz.

<?php
$subject = "abcdef_sdlfjk_kjdf_39843489328";
preg_match('/(\d+)$/', $subject, $matches);

if ( count( $matches ) > 1 ) {
    echo $matches[1];
}

Hızlı bir sorun değilse ben sadece bu çözüm tavsiye ve biçimlendirme tamamen tutarlı olup olmadığını.

PHP'nin PCRE Düzenli İfade motor görev bu tür için inşa edildi

$string = "Hot_Chicks_call_me_at_123456789";

$new_string = preg_replace('{^.*_(\d+)$}x','$1',$string);

//same thing, but with whitespace ignoring and comments turned on for explanations
$new_string = preg_replace('{
								^.*				#match any character at start of string
								_				#up to the last underscore
								(\d+)			#followed by all digits repeating at least once
								$				#up to the end of the string
							}x','$1',$string);	
echo $new_string . "\n";

Biraz terbiyesiz olmak için, belirtilen özellikleri aşağıdaki algoritmayı öneririm:

def trailing_number(s):
    results = list()
    for char in reversed(s):
        if char.isalpha(): break
        if char.isdigit(): results.append(char)
    return ''.join(reversed(results))

Bu karşılaştığında ilk harfine dize yukarı ucundan sadece rakam döndürür.

Ben yaklaşık olarak iyi PHP bilmiyorum çünkü Tabii ki bu örnekte, Python olduğunu. Ancak kolayca kavram olarak tercüme edilmelidir yeterince kolaydır ... dize ters (veya başından doğru sonundan yineleme) ve rakam birikir bir mektup bulmak ve kırılıncaya kadar (veya başında döngünün dışına düşmek string).

C biz kırmak ya da başında döngünün damlasına kadar en son karşılaşılan hanede bir işaretçi tasarruf dize geriye doğru yürümek biraz for(x=strlen(s);x>s;x--) gibi bir şey kullanmak daha verimli olacaktır dize. Sonra bizim en son (en soldaki) haneli bulundu dize ortasına işaretçisidir.