ClickHouse is using infinite cache for compiled regular expressions.
Hyperscan can use several megabytes per compiled regexp.
It makes infinite memory growth possible:

```
clickhouse-benchmark --query "SELECT multiFuzzyMatchAny('Hello, world', 5, ['(' || (SELECT toString(rand(1))) || '|' || (SELECT toString(rand(2))) || ')+(' || (SELECT toString(rand(3))) || '|' || (SELECT toString(rand(4))) || ')+(' || (SELECT toString(rand(5))) || ')+'])"
```

Possible solutions:
- simply drop cache if its size is 1000 entries;
- replace to LRU cache with 1000 entries.

res[i] = negate;
                    ++i;
                }
                
                if (pos + strstr_pattern.size() < begin + haystack_offsets[i])
                    res[i] = !negate;
                else
                    res[i] = negate;
                pos = begin + haystack_offsets[i];
                ++i;
            }
            
            if (i < res.size())
                memset(&res[i], negate, (res.size() - i) * sizeof(res[0]));
        }
        else
        {
            const auto & regexp = Regexps::Regexp(Regexps::createRegexp<is_like,  true, case_insensitive>(needle));
            String required_substring;
            bool is_trivial;
            bool required_substring_is_prefix; 
            regexp.getAnalyzeResult(required_substring, is_trivial, required_substring_is_prefix);
            if (required_substring.empty())
            {
                if (!regexp.getRE2()) 
                {
                    if (haystack_size)
                        memset(res.data(), !negate, haystack_size * sizeof(res[0]));
                }
                else