An Azure service that stores unstructured data in the cloud as blobs.
This looks like a Storage Actions condition-serialization problem, not a Blob Storage filename restriction. In matches, only * and ? are wildcard characters. Parentheses and ! should be literal text.
If the three question marks are wildcards, your existing expression is valid in principle: [[matches(Name, '((DEL!(???)))')]].
If they are literal question marks, escape each one. In an ARM/Bicep/JSON string, the backslash also needs escaping, so the value becomes ((DEL!(\\?\\?\\?))).
The key clue is the deployment error saying Name is empty. That means the portal or resource provider is losing the value during validation, rather than rejecting the blob name itself.
As a workaround, build the condition from startsWith, contains, and endsWith clauses and use Preview Conditions before assigning the task. If the exact pattern still serializes as empty outside the portal, open an Azure support case and include the failed deployment operation ID and generated task JSON. This is likely a product defect.