Контроль возврата (backtracking control) в регулярных выражениях PCRE
Изучая документацию по регулярным выражениям 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)
?
Источник: Stack Overflow на русском