c regex tutorial regular expressions c with examples
C ++ Normal İfadeler veya Normal İfadeler Hakkında Öğretici, normal ifade eşleştirme, arama, değiştirme, giriş doğrulama ve belirteçlere ayırma İşlevleri dahil olmak üzere C ++ 'da regex'in Çalışmasını Açıklar:
Normal İfade veya regexes veya regexp genellikle adlandırıldıkları şekliyle, belirli bir dize veya metin modelini temsil etmek için kullanılır. Normal ifadeler genellikle bir dizenin standart bir metin sözdizimini belirtmek için kullanılır.
=> Herkes İçin C ++ Eğitim Serisini Görmek İçin Burayı Ziyaret Edin.
Normal ifadedeki her karakter, ya gerçek anlamı olan bir karaktere ya da özel anlamı olan bir 'meta karaktere' sahiptir.
Örneğin 'a (a-z)' normal ifadesi 'aa', 'ab', 'ax' vb. değerlerine sahip olabilir. Burada a gerçek bir anlama sahiptir ve (a-z) a'dan z'ye herhangi bir küçük harfli karakteri belirtir.
Elbette yukarıdaki örnek en basit olanıdır. Eşleşmesi için daha karmaşık kalıplara sahip normal bir ifadeye sahip olabiliriz.
Hemen hemen tüm programlama dilleri normal ifadeler için destek sağlar. C ++, C ++ 11'den itibaren normal ifadeler için doğrudan desteğe sahiptir. Programlama dillerinin yanı sıra, lexers, gelişmiş metin düzenleyicileri vb. Gibi metin işleme programlarının çoğu normal ifadeleri kullanır.
Bu eğiticide, genel olarak normal ifadelerin ayrıntılarını ve C ++ programlamayla ilgili olarak keşfedeceğiz.
Ne öğreneceksin:
C ++ 'da Normal İfade (regex)
Normal ifade veya regex, dizi arama algoritmalarında, bulma veya bulma / değiştirme algoritmalarında vb. Kullanılabilen belirli bir arama modelini tanımlayan bir dizi karakter içeren bir ifadedir. Normal ifadeler, giriş doğrulaması için de kullanılır.
Programlama dillerinin çoğu ya normal ifade için yerleşik yetenek ya da kitaplıklar aracılığıyla sağlar. C ++ 11'den itibaren C ++, başlık aracılığıyla standart kitaplık aracılığıyla normal ifade desteği sağlar.
Bir normal ifadeyi ayrıştırmak için kullanılan bir normal ifade işlemcisi, onu, aranan metni temsil eden bir dizeye karşı yürütülen ve eşleştirilen dahili bir gösterime çevirir. C ++ 11, normal ifade için varsayılan dilbilgisi olarak ECMAScript dilbilgisini kullanır. ECMAScript basittir, ancak güçlü regex yetenekleri sağlar.
Range Specification, Repeated Patterns, vb. Gibi regex'te belirttiğimiz bazı kalıpları görelim.
Aralık Özellikleri
Bir dizi karakter veya değişmez değer belirtmek, bir normal ifadede kullanılan en basit kriterlerden biridir.
Örneğin, a'dan z'ye bir dizi küçük harf belirtebiliriz:
(a-z)
Bu tam olarak bir küçük harfle eşleşecektir.
Aşağıdaki kriterler,
(A-Za-z0-9)
Yukarıdaki ifade, tek bir büyük harf, bir küçük harf ve 0 ile 9 arasında bir rakam içeren aralığı belirtir.
Yukarıdaki ifadelerdeki parantezlerin (()) özel bir anlamı vardır, yani aralığı belirtmek için kullanılırlar. İfadenin bir parçası olarak köşeli parantez eklemek istiyorsanız, ondan kaçmanız gerekir.
Yani aşağıdaki ifade,
( (0-9)
Yukarıdaki ifade, bir açılış ayracını ve normal ifade olarak 0-9 arasındaki bir rakamı belirtir.
Ancak, C ++ 'da programlama yaparken, aşağıdaki gibi C ++' ya özgü kaçış sırasını kullanmamız gerektiğini unutmayın:
(\ (0-9)
Tekrarlanan Desen
Yukarıda belirttiğimiz aralık örnekleri, yalnızca bir karakter veya değişmez değerle eşleşir. Birden fazla karakteri eşleştirmek istiyorsak, genellikle kalıpla birlikte 'ifade değiştiriciyi' belirtiriz ve böylece onu tekrarlanan bir kalıp yaparız.
İfade değiştirici, bir modelin oluşumunun bir veya daha fazla kez eşleştirilmesini öneren '+' olabilir veya bir modelin oluşumunun sıfır veya daha fazla kez eşleştirilmesini öneren '*' olabilir.
Örneğin,aşağıdaki ifade,
(a-z) + a, aaa, abcd, softwaretestinghelp gibi dizelerle eşleşir. Asla boş bir dizeyle eşleşmeyeceğini unutmayın.
İfade,
(a-z) * boş bir dizeyle veya yukarıdaki dizelerden herhangi biriyle eşleşir.
Bir veya daha fazla kez eşleşecek bir karakter grubu belirtmek istiyorsanız, parantezleri aşağıdaki gibi kullanabilirsiniz:
(Xyz) +
Yukarıdaki ifade Xyz, XyzXyz ve XyzXyzXyz vb. İle eşleşecektir.
C ++ normal ifade Örneği
Aşağıda gösterildiği gibi bir MS-DOS dosya adıyla eşleşen normal bir ifade düşünün.
char regex_filename() = “(a-zA-Z_) (a-zA-Z_0-9)*\.(a-zA-Z0-9)+”;
Yukarıdaki normal ifade şu şekilde yorumlanabilir:
Bir harfle (küçük harf ve sonra büyük harf) veya alt çizgiyle eşleştirin. Ardından, her biri bir harf, alt çizgi veya rakam olabilen sıfır veya daha fazla karakteri eşleştirin. Daha sonra gerçek bir noktayla (.) Eşleştirin. Noktadan sonra, her biri dosya uzantısını gösteren bir harf veya rakam olabilen bir veya daha fazla karakteri eşleştirin.
C ++ regex'te Kullanılan İşlev Şablonları
Şimdi C ++ 'da normal ifadeyi programlarken bazı önemli fonksiyon şablonlarını tartışalım.
regex_match ()
Bu işlev şablonu, verilen kalıpla eşleşmek için kullanılır. Verilen ifade dizeyle eşleşirse bu işlev true döndürür. Aksi takdirde işlev yanlış döndürür.
Aşağıda, regex_match işlevini gösteren bir C ++ programlama örneği verilmiştir.
#include #include #include using namespace std; int main () { if (regex_match ('softwareTesting', regex('(soft)(.*)') )) cout Çıktı:
Yukarıdaki programda, ilk olarak, regex_match işlevini kullanarak 'softwareTesting' dizesini '(' (soft) (. *) 'Normal ifadesiyle eşleştiriyoruz. Ardından, regex_match'in farklı varyasyonlarını bir dize nesnesi ileterek de gösteriyoruz, menzil vb.
regex_search ()
Regex_search () işlevi, dizgede normal ifadeyle eşleşen bir model aramak için kullanılır.
Regex_search () işlevinin kullanımını gösteren aşağıdaki C ++ programını düşünün.
#include #include #include using namespace std; int main() { //string to be searched string mystr = 'She sells_sea shells in the sea shore'; // regex expression for pattern to be searched regex regexp('s(a-z_)+'); // flag type for determining the matching behavior (in this case on string objects) smatch m; // regex_search that searches pattern regexp in the string mystr regex_search(mystr, m, regexp); cout<<'String that matches the pattern:'< Çıktı:
Bir dizge ve ardından regex nesnesini kullanarak bir normal ifade belirtiriz. Bu dize ve regex, smatch işaret türü ile birlikte regex_search işlevine aktarılır. İşlev, giriş dizesindeki ilk model oluşumunu arar ve eşleşen dizgeyi döndürür.
regex_replace ()
Regex_replace () işlevi, bir düzenli ifadeyle örüntü eşleşmesini bir dizeyle değiştirmek için kullanılır.
Regex_replace () işlevini göstermek için bir C ++ programı kullanalım.
#include #include #include #include using namespace std; int main() { string mystr = 'This is software testing Help portal
'; cout<<'Input string: '< Çıktı:
Burada bir girdi dizimiz var. 'P' ile başlayan bir dizeyle eşleşen normal bir ifade sağlarız. Ardından, eşleşen kelimeyi 'web sitesi' kelimesiyle değiştiririz. Daha sonra, 'web sitesi' kelimesini portala geri koyuyoruz.
C ++ Giriş Doğrulama
Düzenli ifade kullanarak örüntü eşleştirme için kullanılan ana işlev şablonlarını tartıştık. Regex'in hizmet ettiği temel amacın girdi doğrulaması olduğu dikkate değerdir. Standart bir giriş cihazından girilen girişi normal ifade ifadesini kullanarak doğrulayabilirsiniz.
Gelen verileri doğrulamak için normal ifadeyi nasıl kullanabileceğinizi göstermek için aşağıdaki programı kontrol edin.
#include #include #include using namespace std; int main() { string input; regex integer_expr('(\+|-)?((:digit:))+'); //As long as the input is correct ask for another number while(true) { cout<>input; if(!cin) break; //Exit when the user inputs q if(input=='q') break; if(regex_match(input,integer_expr)) cout<<'Input is an integer'< Çıktı:
Bu program, bir tam sayı olup olmadığını doğrulamak için kullanıcı tarafından girilen girdiyle eşleşir. Yukarıdaki çıktı, bir tamsayı girildiğinde uygun bir mesaj verdiğini ve başka herhangi bir veri girildiğinde mesajı geçersiz girdi olarak verdiğini göstermektedir.
iyi bir ücretsiz bilgisayar temizleyici nedir
Sonuç
Regex, arama motorlarında kalıpları aramak, kelime işlemcileri ve metin düzenleyicileri gibi uygulamaların iletişim kutularını aramak ve değiştirmek için kullanılır. Regex ayrıca sed, awk gibi UNIX araçlarında ve programın sözcüksel analizinde kullanılır.
Bu eğitimde kalıpları eşleştirmek, aramak ve değiştirmek için kullanılan işlevleri gördük. Bu işlevleri kullanarak, temelde regex kullanarak istenen işlevselliği uygulayan verimli bir uygulama geliştirebiliriz.
Regex, girdiyi verimli bir şekilde doğrulamaya veya bir dizeyi yama örüntüsüyle arayıp değiştirmeye izin verir ve bu çok az sayıda C ++ kodu kullanılarak yapılabilir.
Ayrıca => okuyun Java Normal İfade Eğitimi
=> TÜM C ++ Öğreticilerini Buradan Kontrol Edin.
Önerilen Kaynaklar
- MongoDB Normal İfade $ regex ile Örnek
- Örneklerle Python DateTime Eğitimi
- Unix Normal İfadeleri Nasıl Kullanılır
- Kod Örnekleriyle Java Dizi Uzunluğu Eğitimi
- Örneklerle Unix Shell Scripting Eğitimi
- Örnek ile MongoDB Parçalama Eğitimi
- Selenyum Örneklerle Metin Eğitimi ile Eleman Bul
- Unix Borular Eğitimi: Unix Programlamada Borular