繁体   English   中英

Clojure多线正则表达式

[英]Clojure multiline regular expression

我正在尝试测试一个字符串的基本html模式,虽然我使用m(多线)修饰符,它只适用于字符串是1-liner

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

失败:

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

作品:

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

我究竟做错了什么?

免责声明:我不是Clojure程序员,但我认为这个问题与语言无关。

当启用多行模式时,插入符号^和美元$的解释会改变如下:它们不是匹配整个输入字符串的开头和结尾而是匹配输入字符串 中每行的开头和结尾。 这是 - 据我所知 - 不是你想要/需要的。

你想要的是你的.* s匹配换行符(默认情况下他们没做的),这可以通过启用单行模式(也就是全点模式)来完成。 所以这意味着:

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

您也可以在RegExr上验证这一点

您需要使用(?s) “dotall模式” 开关

例:

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

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

(?m)开关被看似命名 - 它改变了^$ anchors的作用,允许它们分别匹配行首和行尾 - 这不是你想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM