Я не нахожу это таким уж удивительным;простые вещи обычно быстрее.В языках более высокого уровня, скажем JavaScript, обычно выгодно делегировать обработку строк регулярному выражению, потому что есть много накладных расходов даже на выполнение простого цикла в интерпретируемом языке, но те же соображения не применимы к компилируемым языкам, таким как C ++.
В любом случае, я бы сказал, что вы должны использовать алгоритмы строки надстройки над регулярным выражением, если это целесообразно, поскольку boost :: regex вводит зависимость времени выполнения (она использует внешний файл .so), тогда как алгоритмы в основномвстроенные генераторы кода, и вы должны использовать регулярные выражения только там, где они вам нужны ... скажем, ищите число с плавающей запятой:
[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?
вы хотите попробовать это без регулярных выражений?