2012-02-17 23 views
6

w3.org adresindeki CSS grammar sayfasında bulunan bu regex kodunu buldum.CSS yorumlarını bulan regex'i açıkla

\/\*[^*]*\*+([^/*][^*]*\*+)*\/ 

Oldukça uzun ve bit anlamak zordur. Sadece bir yorum bulmak için

\/\*.*\*\/ 

koymak isterdim ama RegexPal bunu test edildiğinde orijinal regex yorumların her türlü bulabilirsiniz oysa tek satır yorum ve değil çok satırlı bir yorum bulur.

Ben orijinal regex içine

+([^/*][^*]*\*+)* 

parçası ne yaptığını anlamıyorum. Bunu bana açıklayan var mı? belirteç açıklama ile

+2

[Normal İfade Çözümleyicisi] (http://xenon.stanford.edu/~xusch/regexp/analyzer.html) – kev

+0

@Kev: harika bağlantı, teşekkürler! –

+0

Kev Bu bağlantı benim için gelecekte çok yararlı olacak .. Çok teşekkürler. :) – Vigneshwaran

cevap

6

nedeni siz ise sadece tek satır yorumlar bulur tipik normal ifadelerde, . satırsonlarının dışında bir şey maçları, yani; diğeri ise, belirtilen karakterlerden başka bir şeyle eşleşen ve dolayısıyla yeni satırlarla eşleştirilebilecek bir negatif karakter sınıfı kullanır.

Bununla birlikte, eğer bunu düzeltecekseniz (genellikle çok satırlı veya "tek satırlı" eşleşme için bir seçenek var), ilk yorumun /* ile son yorumun */ değerini eşleştireceğini göreceksiniz. ; Birden fazla yorum yapmamak için açgözlü olmayan ölçücü, .*?'u kullanmanız gerekir. Ancak, verdiğiniz daha karmaşık düzenli ifade, bundan daha da karmaşıktır. Nikc.org'un cevabına dayanarak, “yorumların iç içe geçemeyeceği” kısıtlamasını uygulamak olduğuna inanıyorum; Yani, içlerinde /* bulunmamalıdır. /* like /* this */ yorumlarına izin veren diğer dillerde (yani, bir iç/* ne yasaklanmış ne de iç içe bir yorum), \/\*.*?\*\/ paterni bunları eşleştirmek için uygun olacaktır.

15

Simgesi:

\/ <- an escaped '/', matches '/' 
\* <- an escaped '*', matches '*' 
[^*]* <- a negated character class with quantifier, matches anything but '*' zero or more times 
\*+ <- an escaped '*' with quantifier, matches '*' once or more 
( <- beginning of group 
[^/*] <- negated character class, matches anything but '/' or '*' once 
[^*]* <- negated character class with quantifier, matches anything but '*' zero or more times 
\*+ <- escaped '*' with quantifier, matches '*' once or more 
)* <- end of group with quantifier, matches group zero or more times 
\/ <- an escaped '/', matches '/' 

Regex Reference

Analysis on Regexper.com

+1

, her bir parçanın ne anlama geldiğine bayılıyor, bunu sık sık alamıyorsunuz – peroija

İlgili konular