Düzenli ifadeler özyinelemeli yapıları tanımlayamaz . Bu temel sınırlamadır.
JSON'u alın - oldukça basit bir formattır, ancak bir nesne üye değerler olarak diğer nesneleri içerebildiği için (keyfi olarak derin), sözdizimi özyinelemelidir ve regex tarafından ayrıştırılamaz. Öte yandan , özyinelemeli yapılar içermediğinden CSV regex'lerle ayrıştırılabilir.
Kısacası, düzenli ifadeler, kalıbın kendisine atıfta bulunmasına izin vermez. Söyleyemezsiniz: bu noktada sözdiziminde tüm kalıp tekrar eşleşir. Başka bir ifadeyle, normal ifadeler yalnızca doğrusal olarak eşleşir, iç içe geçmiş bir desenin ne kadar derin olduğunu izlemesine izin verecek bir yığın içermez.
Biçimin aksi takdirde ne kadar karmaşık veya karmaşık olduğu ile ilgisi olmadığını unutmayın. S-ifadeleri gerçekten çok basit, ancak bir regex ile ayrıştırılamaz. Öte yandan, CSS2 oldukça karmaşık bir dildir, ancak özyinelemeli yapılar içermez ve bunun için bir regex ile ayrıştırılabilir. (Yinelemeli bir sözdizimine sahip olan CSS ifadeleri nedeniyle bu, CSS3 için doğru olmamasına rağmen.)
Bu nedenle, yalnızca regex kullanarak HTML'yi ayrıştırmanın çirkin veya karmaşık veya hataya eğilimli olması nedeniyle değildir. Bu sadece mümkün değil olmasıdır .
Özyinelemeli yapılar içeren bir formatı ayrıştırmanız gerekirse, özyinelemeli yapıların seviyesini takip etmek için en azından düzenli ifadelerin bir yığınla kullanılmasını sağlamalısınız. Bu genellikle bir ayrıştırıcının nasıl çalıştığıdır. Düzenli ifadeler "doğrusal" bölümleri tanımak için kullanılırken, regex dışındaki özel kod iç içe yapıların izini sürmek için kullanılır.
Genellikle bu şekilde ayrıştırma ayrı aşamalara ayrılır. Tokenizasyon, girdiyi kelimeler, noktalama işaretleri, parantezler vb. Gibi "belirteçler" dizisine ayırmak için normal ifadelerin kullanıldığı ilk aşamadır. Ayrıştırma, bu belirteçlerin hiyerarşik bir yapıya, bir sözdizimi ağacına ayrıştırıldığı bir sonraki aşamadır.
Bu nedenle, HTML veya C # 'nın normal ifadelerle ayrıştırılamadığını duyduğunuzda, normal ifadelerin hala ayrıştırıcıların önemli bir parçası olduğunu unutmayın. Böyle bir dili yalnızca normal ifadeler kullanarak ve yardımcı kod kullanmadan ayrıştıramazsınız .