2013-02-22 32 views
12

Ben basit html deseni için bir dize sınamak çalışıyorum ve ben sadece çalışır m (multiline) değiştirici kullanmak rağmen dizeClojure satırlı düzenli ifade

(re-find #"(?im)^<html>.*<body>.*</body>.*</html>" c)) 

Başarısız bir 1-liner olduğunda:

"<html> <body> sad </body> 
    </html>" 

İşleri: yanlış yapıyorum

"<html> <body> sad </body>  </html>" 

?

+1

Burada bırakacağım http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – mobyte

cevap

14

Yasal Uyarı: Ben bir Clojure programcısı değilim, ancak bu sorunun dilden bağımsız olduğunu düşünüyorum. çok satırlı modu etkinleştirildiğinde

, şapka ^ yorumlanması ve doların $ bunun gibi değişikliklerin : Yerine başlangıcını ve tüm giriş dizesi sonunu eşleşen onlar başını ve sonunu eşleşmeleri giriş dizesindeki her satır. Bu - görebildiğim kadarıyla - istediğin/ihtiyacın olmayan şey.

Ne istiyorsun .* s için yeni satırlarla (varsayılan olarak ne yapmıyorlar) eşleşmesi gerekiyor ve bu tek satırlı mod etkinleştirilerek yapılabilir. Yani bu şu anlama gelir: Ayrıca RegExr bu doğrulayabilir

(re-find #"(?is)^<html>.*<body>.*</body>.*</html>" c)) 

.

10

(?s) "Dotall modu" switch'u kullanmanız gerekir.

Örnek:

user=> (re-find #"\d{3}.\d{3}" "123\n456")  
nil 

user=> (re-find #"(?s)\d{3}.\d{3}" "123\n456") 
"123\n456" 

(?m) anahtarı aldatıcı olarak adlandırılır - bu onları da, bir hat-başlangıç ​​ve sonu hattına sırasıyla maç için izin ^ ve $ çapalar ne değiştirir - - İstediğiniz istemiyor.

+0

Teşekkürler Matt! Diğerleri de http://nakkaya.com/2009/10/25/regular-expressions-in-clojure/ yararlı olabilir. –