Bu düzenli ifade düzeltmek için?

1 Cevap php

i bir URI bazı bölümlerini kaldırmak için normal bir ifade var. Ancak :-) çalışır bir şekilde hesaba birden fazla parça almaz. Biri yardımcı olabilir mi?

$regex = '~/{(.*?)}\*~'

$uri = '/user/{action}/ {Id} */ {SubAction} *';
$newuri = preg_replace($regex, ''  , $uri); 

//$newuri = /user/
//Should be: $newuri = /user/{action}/

Ben bir maç olarak aşağıdaki bölümü eşleşen biliyoruz:

/ {Eylem} / {id} /{subAction}

Ama ayrı ayrı aşağıdaki iki maç olmalıdır:

/ {Id} *

/ {SubAction} *

1 Cevap

Lütfen {(.*?)}\* testi ne yazdım yargılamak ne istediğiniz değil ki {action}/{id}*, tüm, eşleştirme gibi bana görünüyor.

Böylece daha az açgözlü olmak Kleene kapatma değiştirin:

'~/{([^}]*)}\*~'

Ama gerçekten küme parantezi içindeki kısmını ele gerekiyor? Yerine, bu bir ile gidebiliriz gibi geliyor bana:

'~/{[^}]*}\*~'

Her iki şekilde de, [^}]* bölümü bir yıldız bitmiyor çünkü ifade {action}/ maç olmayacağını garanti eder.