Подтвердить что ты не робот

Что такое использование амперсанда в регулярных выражениях в Perl

Ребята У меня это регулярное выражение в Perl, которое я не понимаю.

s/\w+$/($`!)$&/;

Исходная строка была

"huge dinosaur"

После выполнения этого регулярного выражения строка теперь:

"huge (huge !)dinosaur"

Я совершенно не понимаю, как это произошло. И я не понимаю, что там делает амперсанд. Я понимаю $`, но почему он там, откуда я знаю, что $` принимает значение перед совпадением, что я ничего не думаю, потому что не существует соответствующего выражения перед этим регулярным выражением выше.

Если кто-то может связать меня с каким-то очень полезным пособием по регулярным выражениям на Perl, это действительно оценено.

Спасибо

EDIT: Теперь я понимаю, что означает амперсанд, он сохраняет совпадение, а $`сохраняет значение перед совпадением. Теперь то, что я не понимаю снова, - это вся эта часть:

($`!)$&

как эта часть стала

(huge !)
4b9b3361

Ответ 1

Вы правы, $` - это специальная переменная, которая содержит содержимое до матч. $& аналогичен, но содержит то, что соответствовало, и $' содержит то, что было после матча.

В "huge dinosaur", /\w+$/ соответствует dinosaur. Таким образом, переменное содержимое являются:

$` => "huge "
$& => "dinosaur"
$' => ""

Обратите внимание, что соответствие было dinosaur. Затем он заменяет dinosaur часть строки с открытыми parens, "huge ", восклицательный знак, закрытие parens и, наконец, dinosaur (что соответствовало).

Проверьте документацию Perl для perlvar и perlre.

Ответ 2

$& (доллар амперсанд) содержит все регулярное выражение.

$' (доллар, сопровождаемый апострофом или одиночной цитатой) содержит часть строки после (справа от) соответствия регулярных выражений.

$` (долларовый обратный ход) содержит часть строки перед (слева от) совпадением регулярных выражений.

Подробнее см. http://www.regular-expressions.info/perl.html