Это теоретический вопрос по информатике (теория вычислений).
Я знаю, что вычисление регулярных выражений может занять очень много времени. Однако из теории вычислений мы знаем, что сопоставление с регулярным выражением может быть выполнено очень быстро за несколько тактов.
Если регулярные выражения эквивалентны конечным автоматам, почему регулярные выражения имеют (или требуют) метод тайм-аута? Используя DFA, время вычисления для сопоставления может быть чрезвычайно быстрым.
Под RegExps я подразумеваю классы сопоставления шаблонов регулярных выражений на основных языках; JavaScript, С# и т. д.
Являются ли обычные регулярные выражения («регулярные выражения») не эквивалентными регулярным выражениям в теории автоматов (т.е. регулярным языкам)?
См. примеры: Как сделать Я отключаю операции Regex, чтобы предотвратить зависание в .NET 4.5? и Шаблон регулярных выражений Катастрофический возврат .
Если соответствие регулярного выражения требует обратного отслеживания, это означает, что они не эквивалентны регулярным выражениям.
Если языки, захваченные «Regexp», не являются обычными языками, то почему исторически (из какой необходимости) они были расширены?
Если для полученного DFA потребуется огромный набор состояний?
/^
и$/
. 2. Потому что пространство состояний (количество состояний результирующего DFA) может легко стать чрезвычайно большим. - person Sohail Si   schedule 30.08.2019nsregularexpression
из библиотеки Apple, используемой для Objective C и Swift. - person Barmar   schedule 30.08.2019