35.5 Поиск с самым длинным совпадением для регулярных выражений

Обычные функции регулярных выражений выполняют обратный поиск (backtracking) при необходимости для обработки конструкций «\|» и повторения, но они продолжают это только до тех пор, пока не найдут какое-либо совпадение. Затем они успешно завершаются и сообщают о первом найденном совпадении.

В этом разделе описываются альтернативные функции поиска, которые выполняют полный обратный поиск, указанный стандартом POSIX для сопоставления регулярных выражений. Они продолжают обратный поиск до тех пор, пока не рассмотрят все возможности и не найдут все совпадения, чтобы они могли сообщить о самом длинном совпадении, как требуется POSIX. Это намного медленнее, поэтому используйте эти функции только когда вам действительно нужно самое длинное совпадение.

Несмотря на их названия, функции поиска и сопоставления POSIX используют регулярные выражения Emacs, а не регулярные выражения POSIX. См. Emacs против регулярных выражений POSIX. Кроме того, они не поддерживают должным образом операторы нежадного повторения (см. нежадный). Это связано с тем, что обратный поиск POSIX конфликтует с семантикой нежадного повторения.

Команда: posix-search-forward regexp &optional limit noerror count

Это похоже на re-search-forward, за исключением того, что он выполняет полный обратный поиск, указанный стандартом POSIX для сопоставления регулярных выражений.

Команда: posix-search-backward regexp &optional limit noerror count

Это похоже на re-search-backward, за исключением того, что он выполняет полный обратный поиск, указанный стандартом POSIX для сопоставления регулярных выражений.

Функция: posix-looking-at regexp &optional inhibit-modify

Это похоже на looking-at, за исключением того, что он выполняет полный обратный поиск, указанный стандартом POSIX для сопоставления регулярных выражений.

Функция: posix-string-match regexp string &optional start inhibit-modify

Это похоже на string-match, за исключением того, что он выполняет полный обратный поиск, указанный стандартом POSIX для сопоставления регулярных выражений.