diff --git a/include/libcamera/base/meson.build b/include/libcamera/base/meson.build
index f28ae4d42a69c755710b51ffc92976bb6fb6a0d8..f84b514191949f625c3c70f116059ee70de464b5 100644
--- a/include/libcamera/base/meson.build
+++ b/include/libcamera/base/meson.build
@@ -24,6 +24,7 @@ libcamera_base_private_headers = files([
     'message.h',
     'mutex.h',
     'private.h',
+    'regex.h',
     'semaphore.h',
     'thread.h',
     'thread_annotations.h',
diff --git a/include/libcamera/base/regex.h b/include/libcamera/base/regex.h
new file mode 100644
index 0000000000000000000000000000000000000000..1ae21c1f971387da48282d9144827c75270cdcc6
--- /dev/null
+++ b/include/libcamera/base/regex.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2025, Ideas on Board Oy
+ *
+ * std::regex wrapper for gcc
+ */
+
+#pragma GCC diagnostic push
+#if defined __SANITIZE_ADDRESS__ && defined __OPTIMIZE__
+#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+#endif
+#include <regex>
+#pragma GCC diagnostic pop
diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp
index 31a2ac72a7ee6f980b6110ba73919f74d3b7bbe2..b75edffe762155e428e039b4884bed3d469ba751 100644
--- a/src/libcamera/v4l2_subdevice.cpp
+++ b/src/libcamera/v4l2_subdevice.cpp
@@ -13,17 +13,11 @@
 #include <sys/ioctl.h>
 #include <unistd.h>
 
-#pragma GCC diagnostic push
-#if defined __SANITIZE_ADDRESS__ && defined __OPTIMIZE__
-#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
-#endif
-#include <regex>
-#pragma GCC diagnostic pop
-
 #include <linux/media-bus-format.h>
 #include <linux/v4l2-subdev.h>
 
 #include <libcamera/base/log.h>
+#include <libcamera/base/regex.h>
 #include <libcamera/base/utils.h>
 
 #include <libcamera/geometry.h>
