Как проверить, является ли строка * префиксом соответствия * в регулярных выражениях C ++ / Boost? - PullRequest
1 голос
/ 08 мая 2019

Учитывая множество (миллионы) строк и объект регулярного выражения (будь то в реализациях стандартной библиотеки C ++ или в Boost), как я могу 1 эффективно определять для каждой строки, является ли она действительным соответствием приставка

Например, скажем, если мое регулярное выражение равно ^a.*b, то ac является действительным префиксом соответствия (потому что, например, суперструны acb, acbcb, acbdbebfb ... будут соответствовать этому регулярному выражению), но da недопустимый префикс соответствия.

Объединение сторожевого символа является возможным взломом, но оно ненадежно, поскольку я не могу контролировать обнаружение несоответствий, основываясь только на длине (а не разыменовании).

Итак, Я надеюсь, что есть способ проверить объект match_results или использовать другие внутренние механизмы для обнаружения этого в распространенных реализациях (или, по крайней мере, в Visual C ++, на котором я работаю) .

1 Здесь нет жестких границ, просто что-то здравое. У меня есть миллионы строк для сравнения, и я должен быть быстрым для пользователя, сидящего за компьютером. Так что я могу позволить себе удвоить производительность, но не 20х.

...