regcmp ya da regex Subrutine
Amaç
Düzenli ifade kalıplarını derler ve eşleştirir.
Kitaplıklar
Standart C Kitaplığı ( libc.a )
Programcılar Çalışma Ortamı Kitaplığı (libPW.a)
Sözdizimi
#include <libgen.h>
const char *String, . . . ;
Tanımlama
regcmp alt yordamı düzenli bir ifade (ya da Kalıp) derlenir ve derlenen forma bir işaretçi döndürür. regcmp alt yordamı, birden çok Dize parametresine izin verir. Birden fazla Dize parametresi verilirse, regcmp alt yordamı, bunları birlikte birleştirilmiş gibi değerlendirir. Yanlış bir değiştirgele karşılaşırsa, boş değerli bir gösterge döndürür.
Düzenli ifadeleri C programınıza derlemek için regcmp komutunu kullanabilirsiniz. Sık sık, yürütme sırasında regcmp alt yordamınızı çağırma gereksinmesini ortadan kaldırıbilirsiniz.
regex alt yordamı, derlenmiş bir Kalıp ' yi Konu dizesiyle karşılaştırır. Değerleri almak için ek parametreler kullanılır. İşlem hatasız olarak tamamlandığında, regex alt yordamı bir sonraki eşleşmeyen karaktere bir işaretçi döndürür. regex alt yordamı başarısız olursa, boş değerli bir gösterge döndürülür. Genel karakter göstergesi ( __loc1), eşleşmenin başladığı yeri gösterir.
regcmp ve regex alt yordamlar ed komutundan ödünç alınır; ancak, sözdizimi ve anlambilimi biraz değiştirilmiş olabilir. regcmp ve regex alt üst çizgileriyle aşağıdaki simgeleri kullanabilirsiniz:
Öğe | Tanımlama |
---|---|
[ ] * . ^ | Bu simgeler, ed komutunda olduğu gibi aynı anlamlara sahiptir. |
- | regex alt yordamıyla birlikte kullanılan köşeli ayraç içindeki eksi işareti (ya da kısa çizgi), yürürlükteki birleştirme sırasına göre "throute" ("-") anlamına gelir. Örneğin, [ a-z], [ abcd.. ' ye eşdeğer olabilir. xyz] ya da [aBbCc... xYyZz]. En son ya da ilk karakterse,-kendi başına kullanabilirsiniz. Örneğin, karakter sınıfı ifadesi []-],] (sağ ayraç) ve-(eksi) karakterlerle eşleşir. regcmp alt yordamı, yürürlükteki birleştirme sırasını kullanmaz ve köşeli ayraç içindeki eksi işareti yalnızca doğrudan ASCII sırasını denetler. Örneğin, [ a-z] her zaman [ abc... anlamına gelir. xyz] ve [ A-Z] her zaman [ ABC... anlamına gelir. XYZ]. Bir aralıktaki belirli karakterleri regcmp alt yordamını kullanarak denetlememeniz gerekiyorsa, karakter sınıfı ifadesindeki eksi imini kullanmak yerine, bunları belirtik olarak listelemeniz gerekir. |
$ | Dizginin bitişi ile eşleşir. Karakterin yeni satırla eşleşmesi için \n karakteri kullanın. |
+ | + (artı işareti) ile biten bir düzenli ifade, bir ya da daha fazla kez ifade eder. Örneğin, [ 0-9] +, [ 0-9] * [ 0-9] * ile eşdeğerdir. |
{ m} {m, } {m, u} | { } (kaşlı ayraçlar) içine alınan tamsayı değerleri, önceki düzenli ifadenin kaç kez uygueceğini gösterir. d karakteri, minimum sayıdır ve g karakteri, üst sınır sayısıdır. g karakteri 256 'dan küçük olmalıdır. If you specify only d, it indicates the exact number of times to apply the regular expression. {d,} is equivalent to {d,g} and matches d or more occurrences of the expression. + (artı işareti) ve * (yıldız işareti) işlemleri sırasıyla {1,} ve {0,}olarak eşdeğerdir. |
( . . . )$n | Bu, (n+ 1) ıncı ret parametresindeki ekteki düzenli ifade ile eşleştirilen değeri depolar. On kapalı düzenli ifadeye izin verilir. The regex subroutine makes the assignments unconditionally. |
( . . . ) | Parantezler grubu subexpressions. *, + ya da [] gibi bir işleç tek bir karakter üzerinde ya da parantezler içindeki düzenli bir ifadede çalışır. Örneğin, (a * (cb +) *) $0. |
Önceki tanımlı sembollerin tümü özeldir. Özel simgenin kendisiyle eşleşmesini istiyorsanız, \ (ters eğik çizgi) bir \ (ters eğik çizgi) önce gelmeniz gerekir. Örneğin \ $, bir dolar işaretiyle eşleşir.
/* . . . Your Program . . . */
malloc(n)
int n;
{
static int rebuf[256] ;
return ((n <= sizeof(rebuf)) ? rebuf : NULL);
}
regcmp alt yordamı, regex alt yordamının düzenli ifade olarak yorumlayabileceği kod değerleri üretir. Örneğin, [ a-z], regcmp alt yordamının iki uç noktayı (a ve z) içeren bir dizgiyle derlediği bir aralık ifadesini belirtir.
regex alt yordamı, aralık deyimini yürürlükteki birleştirme sırasına göre yorumlar. [ a-z] ifadesi, [ abcd.. ' ye eşdeğer olabilir. xyz] ya da [aBbCcDd ... xXyYzZ], as long as the character önceki the minus sign has a lower collating value than the character takip edilen the minus sign.
Bir aralık ifadesinin davranışı, harmanlama sırasına bağımlıdır. Bir özel karakter takısıyla eşleştirmek istiyorsanız, her birini listelemeniz gerekir. Örneğin, a, b ya da c harflerini seçmek için [ a-c] yerine [ abc] kullanın.
- Aralıktaki gerçek karakterler hakkında derleme sırasında herhangi bir varsayım yapılmaz.
- Çok baytlı karakterler kullanmayın.
- Baştaki [ (sol köşeli ayraç) ya da [ ^ (sol köşeli ayracı hemen ardından bir uzatma işareti) sonra hemen ardından bir çift köşeli ayraç içinde yer alan (sağ köşeli ayraç) kendisini kullanabilirsiniz.
- İfadedeki ilk ya da son karakterse, eksi işaretini (ya da kısa çizgi) de kullanabilirsiniz. Örneğin, [] -0] ifadesi ya sağ köşeden (]) ya da 0-0 arasındaki karakterlerle eşleşir.
Parametreler
Öğe | Tanımlama |
---|---|
Konu | Bir karşılaştırma dizgisi belirtir. |
Dizilim | Derlenecek Kalıp değerini belirtir. |
Desen | Karşılaştırılacak ifadeyi belirtir. |
ret | Karşılaştırma verilerinin saklanacak bir adresi gösterir. regex alt yordamı, birden çok ret Dize parametresine izin verir. |