Из базы данных PostgreSQL я пытаюсь сопоставить 6 или более цифр, которые идут после строки, которая выглядит как «(OCoLC)», и я подумал, что у меня есть рабочее регулярное выражение, которое соответствует этому описанию:
(?<=\(ocolc\))[0-9]{6,}
Вот некоторые строки, для которых должны возвращаться цифры:
|a(OCoLC)08507541
вернет 08507541
|a(OCoLC)174097142
вернет 174097142
и т.д ...
Кажется, это работает для сопоставления строк, когда я тестирую его на regex101.com, но когда я включаю его в свой запрос:
SELECT
regexp_matches(v.field_content, '(?<=\(ocolc\))[0-9]{6,}', 'gi')
FROM
varfield as v
LIMIT
1;
Я получаю это сообщение:
ERROR: invalid regular expression: quantifier operand invalid
Я не уверен, почему ему не нравится это выражение.
ОБНОВЛЕНИЕ В итоге я просто прибег к использованию заявления случая, так как это, казалось, лучший способ обойти это ...
SELECT
CASE
WHEN v.field_content ~* '\(ocolc\)[0-9]{6,}'
THEN (regexp_matches(v.field_content, '[0-9]{6,}', 'gi'))[1]
ELSE v.field_content
END
FROM
varfield as v
, как заметил Electricjelly, я вроде после только числовых символов, но им должна предшествовать строка "(OCoLC)", иначе они не совсем то, что я ищу.Это часть более крупного запроса, поэтому я запускаю второй оператор case с логическим флагом в тех случаях, когда начало строки не было "(OCoLC)".В любом случае это кажется более полезным, поскольку я, вероятно, захочу как-то сохранить эти другие значения.