Обратите внимание, что (.|\n)*
может быть менее эффективным, чем (например) [\s\S]*
(если регулярные выражения вашего языка поддерживают такие escape-последовательности), а не поиск того, как указать модификатор, который делает. также соответствуют новостям. Или вы можете пойти с альтернативами POSIXy, такими как [[:space:][:^space:]]*
.
$
имеет особое значение в регулярном выражении. Он представляет конец строки.
Попробуйте убежать от него:
select REGEXP_COUNT('a$b$$, '[$]')
Я не смог преобразовать в массив - но я смог получить длину значений. Что я делаю, так это конвертирую в строки счетчик использования - это не самая лучшая производительность, но с этим способом я могу также манипулировать как фильтрация каждого значения между разделителями - и мне не нужно использовать [] для таких символов, как $
select (select count(1)
from (select StringTokenizerDelim('a$b$c',' Return 3
) over ()) t)
Return 3
Вы можете создать скалярную функцию UDx (UDSF) в Java, C ++, R или Python. На входе будет строка, а на выходе будет целое число. https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/ExtendingVertica/UDx/ScalarFunctions/ScalarFunctions.htm
Это позволит вам использовать язык специальная логика массива для передаваемых строк. Например, в python вы можете включить эту логику:
input_list = input.split("$")
filtered_input_list = list(filter(None, input_list))
list_count = len(filtered_input_list)
Эти примеры являются хорошей отправной точкой для написания UDx для Vertica. https://github.com/vertica/UDx-Examples