如何组合多个模式进行匹配?

How to combine multiple Pattern for match?

我想在 posts 目录中匹配扩展名为 *.md*.tex 的文件。

我不能使用"posts/*" :: Pattern的原因是因为帖子目录中有文件*.tex.metadatasite 将在该文件上给出错误。

[ERROR] Hakyll.Web.readPandocWith: I don't know how to read a file of the type Binary for: posts/2017-06-02-tex.metadata

尝试以下代码并失败并返回空匹配(无 html 输出)。

match (fromList ["posts/*.md", "posts/*.tex"]) $ do
    route $ setExtension "html"
    compile $ pandocCompiler

let postFiles :: Pattern
    postFiles = fromGlob "posts/*.md" `mappend` fromGlob "posts/*.tex"

match postFiles $ do
    route $ setExtension "html"
    compile $ pandocCompiler

也许我应该使用 fromRegex 但我不知道如何为此编写正则表达式。

非常欢迎补充学习资源。 documentation 缺少样本。

尝试

let postFiles :: Pattern
    postFiles = fromGlob "posts/*.md" .||. fromGlob "posts/*.tex"

match postFiles $ do
    route $ setExtension "html"
    compile $ pandocCompiler

您可以从 documentation 阅读 "Composing patterns" 有哪些不同的函数可以组成多个 Pattern 值。

pattern1 .||. pattern2 创建一个模式,如果 pattern1pattern2 或两者匹配(这就是您想要的)。

pattern1 .&&. pattern2 创建一个匹配的模式,如果 pattern1pattern2 匹配(你不想要这个,但它也说明了可以做什么)。