Что такое использование амперсанда в регулярных выражениях в Perl
Ребята У меня это регулярное выражение в Perl, которое я не понимаю.
s/\w+$/($`!)$&/;
Исходная строка была
"huge dinosaur"
После выполнения этого регулярного выражения строка теперь:
"huge (huge !)dinosaur"
Я совершенно не понимаю, как это произошло. И я не понимаю, что там делает амперсанд. Я понимаю $`, но почему он там, откуда я знаю, что $` принимает значение перед совпадением, что я ничего не думаю, потому что не существует соответствующего выражения перед этим регулярным выражением выше.
Если кто-то может связать меня с каким-то очень полезным пособием по регулярным выражениям на Perl, это действительно оценено.
Спасибо
EDIT: Теперь я понимаю, что означает амперсанд, он сохраняет совпадение, а $`сохраняет значение перед совпадением. Теперь то, что я не понимаю снова, - это вся эта часть:
($`!)$&
как эта часть стала
(huge !)
Ответы
Ответ 1
Вы правы, $`
- это специальная переменная, которая содержит содержимое до
матч. $&
аналогичен, но содержит то, что соответствовало, и $'
содержит то, что было
после матча.
В "huge dinosaur"
, /\w+$/
соответствует dinosaur
. Таким образом, переменное содержимое
являются:
$` => "huge "
$& => "dinosaur"
$' => ""
Обратите внимание, что соответствие было dinosaur
. Затем он заменяет dinosaur
часть строки с открытыми parens, "huge "
, восклицательный знак,
закрытие parens и, наконец, dinosaur
(что соответствовало).
Проверьте документацию Perl для perlvar
и perlre
.
Ответ 2
$&
(доллар амперсанд) содержит все регулярное выражение.
$'
(доллар, сопровождаемый апострофом или одиночной цитатой) содержит часть строки после (справа от) соответствия регулярных выражений.
$`
(долларовый обратный ход) содержит часть строки перед (слева от) совпадением регулярных выражений.
Подробнее см. http://www.regular-expressions.info/perl.html