Я пытаюсь выполнять некоторые регулярные операции в PHP, и я не очень квалифицирован в этой области. Кажется, что когда я использую функцию регулярного выражения, такую как preg_replace для строки, я могу получить доступ к строкам, замененным регулярным выражением, с помощью переменных типа $1, $2 и т.д. Что это называется и как я могу его использовать?
Regex $1, $2 и т.д.
Ответ 1
Они известны в терминологии regex как обратные ссылки (подробнее об этом здесь). Вы используете их для ссылки на группы захвата (или подшаблоны, окруженные ()
) в вашем регулярном выражении или в заменяющей строке.
Пример:
/*
* Replaces abcd123 with 123abcd, or asdf789 with 789asdf.
*
* The $1 here refers to the capture group ([a-z]+),
* and the $2 refers to the capture group ([0-9]+).
*/
preg_replace('/([a-z]+)([0-9]+)/', '$2$1', $str);
Ответ 2
Они называются backreferences и сопоставляют сгруппированные элементы в регулярном выражении.
Если вы окружаете раздел регулярного выражения с помощью скобок, то вы можете ссылаться на него в разделе замены (или даже позже в том же регулярном выражении, по обратной ссылке, соответствующей его положению.
В заменах может использоваться форма слэш или форма доллара:
\1, \2 == $1, $2