我想测试一个字符串一个基本的HTML模式,虽然我用的是m(多)修改它只能当字符串是1班轮Clojure的多正则表达式
(re-find #"(?im)^<html>.*<body>.*</body>.*</html>" c))
失败:
"<html> <body> sad </body>
</html>"
作品:
"<html> <body> sad </body> </html>"
我在做什么错?
我想测试一个字符串一个基本的HTML模式,虽然我用的是m(多)修改它只能当字符串是1班轮Clojure的多正则表达式
(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 mode”switch。
例子:
user=> (re-find #"\d{3}.\d{3}" "123\n456")
nil
user=> (re-find #"(?s)\d{3}.\d{3}" "123\n456")
"123\n456"
的(?m)
开关欺骗性命名 - 它改变了什么^
和$
锚做,让他们也分别启动的行和结束行,匹配 - - 这不是你想要的。
谢谢马特!其他人可能会发现http://nakkaya.com/2009/10/25/regular-expressions-in-clojure/也很有用。 – 2013-11-28 21:19:49
我只是把它留在这里http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – mobyte 2013-02-22 10:06:06