POSIX Düzenli İfadelerinin Derlenmesi
Önceki Düzenli İfade Eşleştirme Sonraki
POSIX Düzenli İfadelerinin Derlenmesi
Bir düzenli ifadeyi eşleştirme amacıyla kulanmadan önce onu derlemeniz gerekir. Bu tam anlamıyla bir derleme işlemi değildir. Derleme sonucunda bir takım makine kodları değil, özel bir veri yapısı üretilir. Fakat derlemenin amacı aynı kalır, amaç daha hızlı işlem yapmaktır. (Derlenmiş düzenli ifadelerin nasıl eşleştirildiği Derlenmiş POSIX Düzenli İfadelerinin Eşleştirilmesi bölümünde anlatılmıştır.)
Derlenmiş düzenli ifadeler için özel bir veri türü vardır:
regex_t
veri türü
Bir derlenmiş düzenli ifadeyi barındıran nesnenin türüdür. Aslında bir yapıdır. Sadece bir üyesinden bahsedeceğiz:
re_nsub
Derlenmiş düzenli ifade içindeki parantezli alt ifadelerin sayısını belirtir.
Yapının başka alanları da vardır, sadece kütüphane içindeki işlevler tarafından kullanıldığından onlardan burada bahsetmeyeceğiz.
Bir regex_t nesnesini oluşturduktan sonra bir düzenli ifadeyi bir regcomp çağrısı ile derlemelisiniz.
int regcomp
(regex_t *restrict    şablon,
 const char *restrict düzenli_ifade,
 int                  derleme-seçenekleri)
işlev
regcomp işlevi, bir dizgeyle eşleştirmek üzere regexec işlevinde kullanmak için bir düzenli ifadeyi bir veri yapısına derler. Derlenmiş düzenli ifadenin biçimi verimli bir eşleştirmeyi mümkün kılacak şekilde tasarlanmıştır. Derlenen düzenli ifadeyi işlev *şablon nesnesine yerleştirir.
regex_t türünde bir nesne ayırıp bunun adresini regcomp işlevine aktarmalısınız.
derleme-seçenekleri argümanı düzenli ifadelerin sözdizimini ve anlamsal bütünlüğünü denetleyen bazı seçenekleri belirtmek için kullanılır. Bkz. POSIX Düzenli İfade Seçenekleri.
REG_NOSUB seçeneği belirtilmişse, regcomp işlevi derlenen düzenli ifadeye alt ifadelerin nasıl eşleştirileceği bilgisini yerleştirmez. Bu durumda, regexec çağrısında eşleşenler ve eşleşen-sayısı argümanlarına 0 değerini aktarmalısınız.
Eğer REG_NOSUB seçeneğini belirtmezseniz, derlenen düzenli ifade alt ifadelerin nasıl eşleştirileceği bilgisini de içerir. Ayrıca, regcomp işlevi şablon'un kaç alt ifade içerdiğini şablon->re_nsub üyesine yazar. Bu bilgiyi alt ifade eşleştirmesinde tutulacak bilgi için ayrılacak dizinin uzunluğuna karar vermek için kullanabilirsiniz.
regcomp işlevi düzenli ifadeyi başarıyla derleyebilmişse 0 ile döner; aksi takdirde, sıfırdan farklı bir hata kodu ile döner (aşağıya bakınız). Dönen hata kodundan hata dizgesini üretmek için regerror işlevini kullanabilirsiniz; bkz. POSIX Şablonunun Temizlenmesi.
regcomp işlevinin döndürdüğü sıfırdan farklı değerler:
REG_BADBR
Düzenli ifade içinde geçersiz bir \{…\} yapısı vardır. Geçerli bir \{…\} yapısı ya tek bir sayı ya da virgülle ayrılmış iki sayı içermelidir.
REG_BADPAT
Düzenli ifade içinde bir sözdizimi hatası var.
REG_BADRPT
? veya * gibi yineleme işleçleri yanlış yerde (bu işleçlerden önce üzerinde işlem yapılacak bir alt ifade olmalıdır).
REG_ECOLLATE
Düzenli ifade geçersiz bir karakter karşılaştırma elemanı içeriyor (geçerli yerelde tanımlı olanlardan biri değil). Bkz. Yerellerin Etkilediği Eylemlerin Sınıflandırılması.
REG_ECTYPE
Düzenli ifade geçersiz bir karakter sınıfı ismi içeriyor.
REG_EESCAPE
Düzenli ifade \ ile bitiyor.
REG_ESUBREG
Geçersiz sayıda \rakam yapısı var.
REG_EBRACK
Düzenli ifade gruplanmamış köşeli ayraçlar içeriyor.
REG_EPAREN
Düzenli ifade gruplanmamış parantezler içeriyor ya da \( ve \) arasında olması gereken bir temel düzenli ifadenin sarmalayıcılarından biri eksik.
REG_EBRACE
Düzenli ifadede \{ ve \} sarmalayıcılardan biri eksik.
REG_ERANGE
Bir aralık ifadesindeki sonlandırıcılardan biri geçersiz.
REG_ESPACE
regcomp için bellek yetersiz.
Önceki Üst Ana Başlık Sonraki
Düzenli İfade Eşleştirme Başlangıç POSIX Düzenli İfade Seçenekleri
Bir Linux Kitaplığı Sayfası