Tam aksine. İnsanlar regex papağan IMO çok sık kötü bir yoludur. Preg_match öğesinin aşırı kullanıldığı açık.php
, ancak bunu yapmak için zaman zaman duyarlı olduğu daha az açıktır (PHP'de).
Şimdiye kadar gider ve dize işlevlerini kullanmak için php ülkesinde başka bir mikro-optimizasyon olduğunu tahmin ediyorum. Çok ve çok faydalı olan ve genellikle daha iyi bir seçimdir. Fakat preg_match
birden fazla lehine çekmemelisin strpos
veif
zincir . Uygulamada ortaya çıktığı için libpcre genellikle PHP'nin string alternatifleri arayan bir döngü çalıştırabilmesinden daha hızlıdır.
Yeni bir örnek olarak, bir dizenin tamamen küçük harf olup olmadığını test etmemi sağladı:
if ($string == strtolower($string))
Şundan daha fazla okunabilir:
if (!preg_match("/[A-Z]/", $string))
Ve hepsinin PHP olduğu için ilkinin daha hızlı olması gerektiğini varsayarsınız. Fakat gerçekte regex yalnızca bir kez dizeye bakar ve büyük harf bulduğu anda olumsuzlanan durumu iptal edebilir. Strtolower () yaklaşımı, ancak dizeye iki kez bakar. İlk strtolower (), bir harfin her harfin üzerinde yinelenerek, karşılaştırılarak ve üst harflerle çoğaltılmasıyla bir dizgenin çoğaltılmasını sağlar. Sonra==
kez daha karşılaştırarak orijinalin ve kopyanın üzerinde tekrar eder.
Yani bu açık bir dava değil. Ve nesnel olmak için ilki genelde daha hızlıdır, çünkü normalde sadece kısa ipleri karşılaştırırsınız. Ancak PHP string işlevlerinin her zaman düzenli ifadeler üzerinde önerilebileceği varsayımıyla kör olmamak şarttır.
( @ Bobince'nin xhtml-regexes ile ilgili eğlenceli cevabı ve son zamanlarda çok işe yaramayan bir şekilde nasıl sıkça bağlandığı ile ilgili başka bir rant eklemeye teşvik ediyorum .)