Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Clojure多行正则表达式_Regex_Clojure - Fatal编程技术网

Regex Clojure多行正则表达式

Regex Clojure多行正则表达式,regex,clojure,Regex,Clojure,我试图测试一个字符串的基本html模式,尽管我使用了m(多行)修饰符,但它只在字符串为1行时起作用 (re-find #"(?im)^<html>.*<body>.*</body>.*</html>" c)) (重新查找#“(?im^.*.c)) 失败: "<html> <body> sad </body> </html>" 悲伤的 " 作品: "<html>

我试图测试一个字符串的基本html模式,尽管我使用了m(多行)修饰符,但它只在字符串为1行时起作用

(re-find #"(?im)^<html>.*<body>.*</body>.*</html>" c))
(重新查找#“(?im^.*.c))
失败:

"<html>   <body>   sad   </body> 
     </html>"
悲伤的 " 作品:

"<html>   <body>   sad   </body>      </html>"
“悲伤”

我做错了什么?

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

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

您需要的是让您的
*
s匹配换行符(默认情况下它们不会这样做),这可以通过启用单行模式(也称为点全部模式)来实现。这意味着:

(re-find #"(?is)^<html>.*<body>.*</body>.*</html>" c))
(重新查找#“(?is^.*.*.“c))
您还可以在上进行验证。

您需要使用
(?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)
开关的名称有欺骗性--它改变了
^
$
锚的功能,允许它们分别匹配行的开始和结束--这不是您想要的。

我就把它留在这里,谢谢Matt!其他人可能也会觉得有用。