diff --git a/lxd/filter/match.go b/lxd/filter/match.go
index <HASH>..<HASH> 100644
--- a/lxd/filter/match.go
+++ b/lxd/filter/match.go
@@ -1,12 +1,37 @@
 package filter
 
+import (
+	"reflect"
+	"regexp"
+	"strings"
+)
+
 // Match returns true if the given object matches the given filter.
 func Match(obj any, clauses []Clause) bool {
 	match := true
 
 	for _, clause := range clauses {
 		value := ValueOf(obj, clause.Field)
-		clauseMatch := value == clause.Value
+		var clauseMatch bool
+
+		// If 'value' is type of string try to test value as a regexp
+		// Comparison is case insensitive
+		if reflect.ValueOf(value).Kind() == reflect.String {
+			regexpValue := clause.Value
+			if !(strings.Contains(regexpValue, "^") || strings.Contains(regexpValue, "$")) {
+				regexpValue = "^" + regexpValue + "$"
+			}
+
+			r, err := regexp.Compile("(?i)" + regexpValue)
+			// If not regexp compatible use original value.
+			if err != nil {
+				clauseMatch = strings.EqualFold(value.(string), clause.Value)
+			} else {
+				clauseMatch = r.MatchString(value.(string))
+			}
+		} else {
+			clauseMatch = value == clause.Value
+		}
 
 		if clause.Operator == "ne" {
 			clauseMatch = !clauseMatch
lxd/filter: Support case insensitive and regular expresions