Bu düzenli ifade bulabilirsiniz / optimize edilmesi yerine?

4 Cevap php

basit bir gerçekten, ben bulmak ve bir html pasajı içinde php sabitleri ile etiketleri değiştirmek için normal bir ifade yazdım. işleri benim çözüm, sadece doğru gelmiyor. bu nasıl geliştirilebilir?

preg_match_all('/\{CONSTANT_(.*)\}/', $final, $result, PREG_PATTERN_ORDER);
            for ($i = 0; $i < count($result[1]); $i++) {
               $final = str_replace($result[0][$i], constant($result[1][$i]),$final);
            }

4 Cevap

Sen preg_replace_callback ile bir vuruşta hepsini yapabilirsiniz

function getConstant($matches) 
{
    return constant($matches[1]);
}
$final=preg_replace_callback(
           '/\{CONSTANT_(.*?)\}/',
           "getConstant",
           $final);

I .*?, bu bir} uzun bir maç mümkün olup olmadığını yeme gitmez sağlanması etkisi olacaktır ile .* olmayan açgözlü yaptık unutmayın. Sen ([^}]*), ya da daha iyisi, ([a-zA-Z0-9_]+) ile aynı etkiyi alabilir

Ben tekerleği yeniden icat her zaman karşı değilim: Eğer şablon motoru çeşit (zaten hangi php) gerekirse Smarty bakabilirsiniz.

Ne hakkında

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit= -1 [, int &$count ]] )

?

".*" bir normal ifadede, gibi açgözlülükle bulduğu her şeyi eşleşecek ile kullanırken dikkatli olun. Örneğin, aşağıdaki satırda:

{CONSTANT_ONE} blah {CONSTANT_TWO}

Yukarıdaki düzenli ifade "ONE} blah {CONSTANT_TWO" dizesini çekeceği

Sen yerine bir karakter sınıfını kullanabilirsiniz. Bir "}" karakteri dışında bir şey eşleştirmek için:

/\{CONSTANT_([^}]*)\}/