2012-12-28 21 views
6

Tüm eşleşmeler yerine tek bir eşleşme örneğini kaldırmak için ltrim()'u kullanmanın basit bir yolu var mı?Tek bir karakteri kaldırmak için PHP yerleşik ltrim() kullanımı

maçı (bu durumda sesliler), sadece ilk ben dizeleri dizisi döngü ve ben ilk kaldırmak istediğiniz ve:

ltrim($value, "aeiouyAEIOUY"); 

varsayılan davranış dize ile aardvark veya Aardvark olur "rdvark" olmak üzere düzeltilmelidir. "ardvark" olmak istiyorum.

Hiçbir şekilde ltrim'e bağlı değilim ama en yakın yerleşik PHP işlevi göründü. Bu ltrim ve rtrim güzel Söylemek nedenlerle yapmak için ltrim kullanamazsınız :)

+1

aaeezz sonuç aezz mi yoksa aeezz mi olmalıdır? – Lepidosteus

cevap

4

Sadece emprenye bir sınır seçeneği vardır yerine kullanmak

örn

$value = preg_replace('/^[aeiouy]/i', '', $value, 1); 
+0

Bu aslında, {1} 'dır. Ayrılmak için daha az. Downvote ikinci parametredeki çift tırnak için olabilir mi? – Geo

+0

ah sağladığım için teşekkürler –

1

isteğe bağlı parametre "sınırı", sadece söyleyerek ... vardı olurdu, ne de hangi da (str_replace kullanabilirsiniz sınırsızdır). Bunun en kolay sadece bir regex kullanmayı düşünüyorum: Eğer gerçekten bir alt kullanabilirsiniz, bunu yapmak istemiyorsanız Ancak

$value = preg_replace('/^[aeiouy]/i', '', $value); 

, ancak bu dizeleri herhangi birinin pozisyonunu kontrol etmesi gerekir Bildiğim bir kontrol yapan php işlevi olmadığı için bir döngüde dize.

<?php 
    $value = preg_replace('/^[aeiouy]/i', '', $value); 
?> 
+0

Teşekkürler, ilk karakteri nasıl kaldırdığımı kısıtlamıyorum. Ben sadece PHP'de yeni ve henüz tüm fonksiyonlarla yeterince tanıdık değilim. preg_replace harika çalışıyor. – ptay

1

Sen preg_replace işlevini kullanabilirsiniz

$value = preg_replace('/^[aeiouy]/i', '', $value); 

Not i küçük harf duyarsız hale getirir.

+0

'{1}' yedekli. – delnan

+0

@delnan Başlıklar için teşekkürler. Onu kaldırdım. –

4

Düzenli ifadeler muhtemelen overkill, ancak:

+0

Mükemmel! Teşekkür ederim. – ptay

1

yapmanız aradıklarını yapmayı gidebilir birkaç yolu vardır.

$pattern = '/^[aeiouy]{1}/i'; 
$result = preg_replace($pattern, '', $original_string); 
+0

Bu da iyi çalışıyor, teşekkürler! – ptay

1

Bu (yani benim düzenli ifadeler cevap görmezden) muhtemelen en etkili yoludur: Böyle bir düzenli ifade yedek olurdu

Belki de en basit,

if (strpos('aeiouyAEIOUY', $value[0]) !== false) $value = substr($value, 1); 

Ya

if (stripos('aeiouy', $value[0]) !== false) $value = substr($value, 1); 
+0

Düzenli versiyonunu daha çok beğeniyorum. –

+0

+1. Bunun, RegEx'ten daha hızlı olacağından şüpheleniyorum. Karşılaştırma yapan var mı? – Geo

+0

@Gizli ifade sürümü sürekli olarak yaklaşık% 20 daha yavaştır, ancak her ikisi için de 1 milyon işlem yalnızca bir saniye sürer, bu nedenle bu durumda bir hız avantajı olması olası değildir. –

İlgili konular