Обновление
Добавлен (?<!\\)
перед квантификаторами, потому что экранированные * + не должны совпадать. Замена все равно не удастся, если есть \\*
(соответствует \
0 или более раз).
Улучшение было бы это
s/(?<!\\)\*(?!(?<!\\)[^[]*?(?<!\\)\])/{0,1024}/
s/(?<!\\)\+(?!(?<!\\)[^[]*?(?<!\\)\])/{1,1024}/
Смотри здесь, на Regexr
Это означает совпадение [*+]
, но только если впереди нет закрытия ]
и до [
нет. И в квадратных скобках не допускается \
((?<!\\)
часть) .
(?! ... )
- негативный взгляд
(?<! ... )
- негативный взгляд
Подробнее см. perlretut
Обновление 2 включает квантификаторы притяжений
s/(?<!(?<!\\)[\\+*?])\+(?!(?<!\\)[^[]*?(?<!\\)\])/{1,1024}/ # for +
s/(?<!\\)\*(?!(?<!\\)[^[]*?(?<!\\)\])/{0,1024}/ # for *
Смотрите это здесь на Regexr
Кажется, работает, но сейчас становится все сложнее!