В регулярных выражениях, что такое обратная ссылка/обратная ссылка?
Что означает использование регулярного выражения backtracking?
Также вы могли бы привести пример этого?
Ответ 1
Backreferences и backtracking - две разные вещи. Первый использует результаты захвата позже в коде, например.
(['"]).*?\1
Это будет соответствовать строке с одним или двумя кавычками (на данный момент игнорируется экранирование). Он использует обратную ссылку, чтобы ссылаться на открытый символ (одиночная или двойная кавычка), чтобы он соответствовал этому в конце.
Откат, с другой стороны, является тем, что регулярные выражения естественным образом происходят во время согласования, когда совпадение не выполняется. Например, если я сопоставляю выражение
.+b
для строки
aaaaaabcd
то сначала он будет соответствовать aaaaaabc на .+ и сравните b с оставшимся d. Это терпит неудачу, поэтому он немного отстает и соответствует aaaaaab для .+, а затем сравнивает окончательный b с c. Это также терпит неудачу, поэтому он снова возвращается и пытается aaaaaa для .+ и соответствует b по отношению к b и преуспевает.