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.

const ColumnString::Chars & haystack_data,
        const ColumnString::Offsets & haystack_offsets,
        const ColumnString::Chars & needle_data,
        const ColumnString::Offsets & needle_offset,
        [[maybe_unused]] const ColumnPtr & start_pos_,
        PaddedPODArray<UInt8> & res)
    {
        const size_t haystack_size = haystack_offsets.size();
        assert(haystack_size == needle_offset.size());
        assert(haystack_size == res.size());
        assert(start_pos_ == nullptr);
        if (haystack_offsets.empty())
            return;
        String required_substr;
        bool is_trivial;
        bool required_substring_is_prefix; 
        size_t prev_haystack_offset = 0;
        size_t prev_needle_offset = 0;
        Regexps::LocalCacheTable cache;
        Regexps::RegexpPtr regexp;
        for (size_t i = 0; i < haystack_size; ++i)