2011-07-18 18 views
45

ile değiştirin. 'aba aaa cba sbd dga gad aaa cbz''a benzer bir yapıya sahip bir dizgim var. Dize, harici bir kaynaktan her seferinde biraz farklı olabilir.Yalnızca ilk eşlemeyi preg_replace

Sadece 'aaa''un ilk oluşumunu değiştirmek istiyorum, ancak diğerlerini değil. Mümkün mü?

cevap

86

preg_replace isteğe bağlı dördüncü parametre limit geçerli:

preg_replace($search, $replace, $subject, 1); 
+0

Son cevaptan başlayarak sadece ilk eşleşmeyi değiştirmeniz gerekirse, cevabınız için teşekkür ederiz. kod ne olurdu? –

+2

@josesanchez Dize çok uzun değilse strrev kullanarak tersine çevirebilir ve bu hileyi kullanarak bulmak istediğiniz kalıbın tersini arayabilir, sonra dizgeyi tekrar tersine çevirebilirsiniz. Çok uzunsa, iki kez – Paulpro

8

Bunun için preg_replace ait limit argüman kullanmak ve 1 olarak ayarlayın, böylece en az bir yedek olur:

$new = preg_replace('/aaa/','replacement',$input,1); 
0

örneğin, dışarıdaki içerik şu şekildedir:

START 
FIRST AAA 
SECOND AAA 

1) kullanırsanız:

$content = preg_replace('/START(.*)AAA/', 'REPLACED_STRING', $content); 

son AAA START ile herşeyi değiştirecek ve Kişisel sonucu olacaktır:

REPLACED_STRING 

2) kullanırsanız:

$content = preg_replace('/START(.*?)AAA/', 'REPLACED_STRING', $content); 

Sonuçınız şunun gibi olacak:

REPLACED_STRING 
SECOND AAA 
+0

dizgisini tersine çevirmenin önüne geçmek için onu tersine taramak isteyeceksiniz, bu neden tam olarak gerçekleşir? Hakkında "?". – user111671