Контроль возврата (backtracking control) в регулярных выражениях PCRE

Рейтинг: 0Ответов: 0Опубликовано: 25.07.2025

Изучая документацию по регулярным выражениям PCRE, дошёл до раздела "Backtracking Control":

The following act immediately they are reached:

  (*ACCEPT)       force successful match
  (*FAIL)         force backtrack; synonym (*F)
  (*MARK:NAME)    set name to be passed back; synonym (*:NAME)

The following act only when a subsequent match failure causes a backtrack to reach them. They all force a match failure, but they differ in what happens afterwards. Those that advance the start-of-match point do so only if the pattern is not anchored.

  (*COMMIT)       overall failure, no advance of starting point
  (*PRUNE)        advance to next starting character
  (*PRUNE:NAME)   equivalent to (*MARK:NAME)(*PRUNE)
  (*SKIP)         advance to current matching position
  (*SKIP:NAME)    advance to position corresponding to an earlier
                  (*MARK:NAME); if not found, the (*SKIP) is ignored
  (*THEN)         local failure, backtrack to next alternation
  (*THEN:NAME)    equivalent to (*MARK:NAME)(*THEN)

Скажу честно, практически ничего не понял. Единственное, что я пока что смог примерно понять - это как работает (*SKIP), благодаря вопросу How do (*SKIP) or (*F) work on regex? на enSO. Кто-нибудь может объяснить, желательно с примерами, когда на практике используются (*COMMIT), (*PRUNE) и (*THEN)?

Ответы

Ответов пока нет.