次の 2 つの重要事項が指定されていません。
- どのデータベースを使用していますか?
- PCRE 正規表現と POSIX 正規表現を切り替えることができますか?
正規表現を使用してクエリを実行できるデータベースを使用していて、データベースが必要な標準 (PCRE/POSIX) をサポートしていると仮定すると、 extra() クエリセット修飾子__regex
を使用して逆フィルター処理できます。以下のコードを見てください。
Model.objects.extra(where=[sql_regex('REGEX_COLUMN')], params=['TEXT TO MATCH']).all()
コードsql_regex()
は次のようなものです。
from django.db import backend
def sql_regex(column, type='regex'):
op = backend.DatabaseWrapper.operators[type].replace('%s', column)
return '%s ' + op
以前backend.DatabaseWrapper.operators[type]
は、データベース バックエンドに格納されている正規表現をクエリするための事前定義されたパターンを取得していました。