Вам нужно использовать двойные побеги со Снежинкой. Если вы просто выберете свою строку регулярного выражения, вы получите:
SELECT '/(_((\-|\+)?[0-9]+(\.[0-9]+)?).)/';
=> /(_((-|+)?[0-9]+(.[0-9]+)?).)/
, что в точности соответствует функции регулярного выражения в качестве входного аргумента.
С двойным экранированием вы получите:
SELECT '/(_((\\-|\\+)?[0-9]+(\\.[0-9]+)?).)/';
=> /(_((\-|\+)?[0-9]+(\.[0-9]+)?).)/
что, как я полагаю, вам нужно.
Ошибка, которую вы получаете от регулярного выражения (-|+)
; оператору +
нужен реальный аргумент ...