Как уже упоминалось, эти символы пунктуации будут удалены, за ними следует содержимое символа $ replace, затем больше символов пунктуации, а также сбой, поскольку сам $ replace содержит несоответствующие скобки.
Однако, несколько других общих правил регулярных выражений: во-первых, вместо ORing все вместе (и это просто для упрощения логики и ввода), я бы держал их вместе в классе символов. соответствие [\s^,\/;\|]
потенциально менее подвержено ошибкам и удобно для пальцев.
Во-вторых, не используйте группирующие скобки для набора ()
, если вы действительно не имеете это в виду. Это помещает захваченную строку в буферы захвата и приводит к накладным расходам в движке регулярных выражений. За perldoc perlre
:
ВНИМАНИЕ: Как только Perl обнаружит, что вам нужен один из $ &, $ `или $ 'в любом месте программы, он должен предоставить их для каждого совпадения с шаблоном. Это может существенно замедлить вашу программу. Perl использует тот же механизм для получения $ 1, $ 2 и т. Д., Поэтому вы также платите цену за каждый шаблон, который содержит скобки с захватом. Источник
Вы можете легко обойти это, просто изменив его, добавив ?:
в скобках:
(?:[\s^,\/;\|])
Редактировать: не то, что вам нужно группировка без захвата в этом случае, но это уже в исходном регулярном выражении.