Birçok programcı, hızlı bir düzenli ifade ifade etmenin, bugünlerde genellikle bazı web servislerinin yardımı ile veya daha geleneksel olarak etkileşimli bilgi isteminde veya belki de geliştirilmekte olan normal ifadeleri içeren küçük bir senaryo yazması ve bir test senaryoları koleksiyonu yazmanın mutluluğunu bilir. . Her iki durumda da işlem yinelemeli ve oldukça hızlıdır: İstediğinizle eşleşip yakalayana ve istemediğiniz şeyi reddedinceye kadar şifreli görünümlü dizgiyi hacklemeye devam edin.
Basit bir vaka için, bir Java regexp olarak, böyle bir şey olabilir:
Pattern re = Pattern.compile(
"^\\s*(?:(?:([\\d]+)\\s*:\\s*)?(?:([\\d]+)\\s*:\\s*))?([\\d]+)(?:\\s*[.,]\\s*([0-9]+))?\\s*$"
);
Ayrıca pek çok programcı normal bir ifadeyi düzenlemeye ihtiyaç duymanın acısını ya da sadece eski bir kod tabanında düzenli bir ifadeyi kodlama zorunluluğunu bilir. Bölmek için biraz düzenleme yapıldığında, yukarıdaki regexp, regexps'e oldukça aşina olan herhangi birisini anlamak için hala çok kolaydır ve regexp ustaları ne yaptığını hemen görmelidir (bir kişinin egzersiz istemesi durumunda cevap vermelidir). kendileri bulmaktan.
Ancak, bir regexp'in gerçekten salt yazılabilir bir şey haline gelmesi için çok daha karmaşık hale gelmesi gerekmiyor ve hatta gayretli belgelerle ( elbette ki herkes yazdıkları tüm karmaşık regexps'ler için ...), regexps'i değiştirmek bir hale geliyor zor bir görev. Eğer regexp dikkatli bir şekilde test edilmediyse, bu çok tehlikeli bir görev olabilir (ama elbette herkes hem pozitif hem de negatif tüm karmaşık regexps için kapsamlı birim testlerine sahiptir).
Öyleyse, uzun lafın kısası, güçlerini kaybetmeden düzenli ifadeler için yazma-okuma çözümü / alternatif var mı? Yukarıdaki regexp alternatif bir yaklaşımla nasıl görünür? Çok dilli bir çözüm en iyisi olsa da, herhangi bir dilde sorun yoktur, ancak regexps çok dillidir.
Ve sonra, önceki regexp'nin yaptığı şey şudur: 1:2:3.4
Boşluklara izin verilen ve sadece 3
gerekli olan her sayıyı yakalayan , biçimindeki bir sayı dizisini ayrıştırma .