Здесь вы ищете группу захвата и обратную ссылку.
В регулярном выражении все, что заключено в (
и )
, равно captured
для последующего использования любым выполнением совпадения с регулярным выражением, которое в данном случае является Sublime Text. Количество поддерживаемых групп захвата зависит от используемой библиотеки регулярных выражений, но обычно вы получаете не менее 10.
При использовании каждый случай ()
создает capture
, причем первый захват нумеруется как 1
, второй 2
и т. Д. (Как правило, также все совпадение - захват 0
) , Использование последовательности \1
или $1
означает «использовать содержимое первой группы захвата».
В качестве примера рассмотрим регулярное выражение ^([a-z]).\1
. Разбивка:
^
- совпадение, начинающееся в начале строки
(
- начать захват
[a-z]
- соответствует одной строчной букве
)
- завершить захват
.
- соответствует любому символу
\1
- совпадать с содержимым первого захвата
С учетом этого ввода:
abc
aba
bab
Это регулярное выражение соответствует aba
и bab
, потому что первый символ в обоих случаях - captured
как \1
и должен соответствовать позже. Однако abc
не совпадает, потому что в этом случае \1
- это a
, а третий символ - c
.
Результат захвата также может быть использован в тексте замены также. Если вы измените свое регулярное выражение, вы можете захватить текст, который хотите сохранить, и использовать его при замене.
Как примечание, ваше регулярное выражение, как указано в вашем вопросе выше, не совпадает в Sublime, потому что (
запускает группу захвата и, следовательно, не соответствует (
, которое на самом деле есть в тексте. Если вы используете Sublime и включите опцию Highlight Matches
на панели Find/Replace
, вы увидите, что ваше регулярное выражение не считается совпадением.
Найти:
Session::flash\(\s*'error'\s*,(.*)\);
Заменить:
flash(\1)->error();
Результат:
flash( 'Only users with permission may view the directory user.' )->error();
flash( 'System user ID does not exist.' )->error();
Это более или менее регулярное выражение, изложенное в вашем вопросе, за исключением:
(
и )
в вашем регулярном выражении заменены на \(
и \)
, что означает регулярное выражение в том, что оно должно соответствовать буквальному (
и не должно рассматриваться как начало захват.
.*
изменяется на (.*)
, что означает «любой текст, который появляется здесь, захватите его для дальнейшего использования.
Текст замены относится к тексту, захваченному как \1
, и помещает его обратно в замену.