PHP: İlk kolon küçük harf sol her harfini yapmak için doğru düzenli ifade

5 Cevap php
$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';

Şu anda var:

$value = preg_replace('/(^.+)(?=:)/e', "strtolower('\\1')", $value);

Bu çıkışlar

$value='x-cem-date:wed, 16 dec 2009 15:42:28 GMT';

gerektiği çıkışı:

$value='x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT';

5 Cevap

Aşağıdaki gibi düzenli ifade olmalıdır:

/(^.+?)(?=:)/

Fark +? karakter. +? ifadesi yerine bir sonraki maça kadar MOST karakter, ifadesinde sonraki maçta üzerine hareket kadar karakter AZ miktarda bulabilirsiniz, yani olmayan açgözlü.

Sen explode() ve implode() yerine normal bir ifade kullanmayı düşünebilirsiniz.

$value_a = explode( ':', $value );
$value_a[0] = strtolower( $value_a[0] );
$value = implode( ':', $value_a );

Denemek

preg_replace('/([\w-]+?)(:[\w\d\s\:\,]+)/e', "strtolower('\\1') . '\\2'", $value);

Bu, en azından, yayınlanan örnek çalışır.

Bir maç ile düzenli ifade deneyin

$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
$value = preg_match('/(^.+)(?=:)/e', $value, $matches);	
print_r ($matches) . "\n";

Bu çıkış gerekir

Array
(
	[0] => x-Cem-Date:Wed, 16 Dec 2009 15:42
	[1] => x-Cem-Date:Wed, 16 Dec 2009 15:42
)

Bunun yerine bu deneyin

$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
$value = preg_replace('/(^.+?:)/e', "strtolower('\\1')", $value);	
echo $value . "\n";

Regex açgözlü ve gerekenden daha fazla kapma değil yani ? orada.

Sadece bilgi için, bu preg_replace_callback kullanarak versiyonu

$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';

function callback($text){return(strtolower($text[0]));}

echo preg_replace_callback("/^([^:]+:)/","callback",$value);

çıktı

x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT