diff --git a/src/mkv/write.c b/src/mkv/write.c
index b712d838e1d036e1df3af820580d9dfffcf84302..08d2764f35d3cdb983140dbdda555f93d90a343b 100644
--- a/src/mkv/write.c
+++ b/src/mkv/write.c
@@ -141,7 +141,8 @@ error:
 static bool
 metadata_from_path(char *const mkvfile, struct kara_metadata *meta)
 {
-    regex_t regex;
+    static regex_t regex;
+    static int regex_init = 0;
     const size_t nmatch = 10;
     regmatch_t pmatch[nmatch];
     int reti, sta = false;
@@ -152,7 +153,9 @@ metadata_from_path(char *const mkvfile, struct kara_metadata *meta)
         "(jp|fr|en|ru|sp|it|ch|latin|multi|undefined)/(.+)/"
         "(.+) - (OP|ED|IS|AMV|VOCA|PV|MV|LIVE)([[:digit:]]*) - (.+)\\.mkv$";
 
-    GOTO_IF(regcomp(&regex, rgx, REG_EXTENDED), "Failed to compile regex", error);
+    if (!regex_init)
+        GOTO_IF(regcomp(&regex, rgx, REG_EXTENDED), "Failed to compile regex", error);
+
     memset(meta, 0, sizeof(struct kara_metadata));
     memset(msgbuf, 0, LEKTOR_TAG_MAX * sizeof(char));