Учитывая множество (миллионы) строк и объект регулярного выражения (будь то в реализациях стандартной библиотеки C ++ или в Boost), как я могу 1 эффективно определять для каждой строки, является ли она действительным соответствием приставка
Например, скажем, если мое регулярное выражение равно ^a.*b
, то ac
является действительным префиксом соответствия (потому что, например, суперструны acb
, acbcb
, acbdbebfb
... будут соответствовать этому регулярному выражению), но da
недопустимый префикс соответствия.
Объединение сторожевого символа является возможным взломом, но оно ненадежно, поскольку я не могу контролировать обнаружение несоответствий, основываясь только на длине (а не разыменовании).
Итак, Я надеюсь, что есть способ проверить объект match_results
или использовать другие внутренние механизмы для обнаружения этого в распространенных реализациях (или, по крайней мере, в Visual C ++, на котором я работаю) .
1 Здесь нет жестких границ, просто что-то здравое. У меня есть миллионы строк для сравнения, и я должен быть быстрым для пользователя, сидящего за компьютером. Так что я могу позволить себе удвоить производительность, но не 20х.