Что означает $1 в Perl?



Что означает $1 в Perl? Далее, что означает $2?
Сколько существует переменных $number?

977   9  

9 ответов:

The $number переменные содержат части строки, которая соответствует группы захвата( ... ) в шаблоне для вашего последнего матча регулярного выражения, если матч был успешным.

например, возьмите следующую строку:

$text = "the quick brown fox jumps over the lazy dog.";

после заявления

$text =~ m/ (b.+?) /;

равно текст "brown".

числовые переменные совпадают с последними успешных оператор соответствия или замены, который вы применили:

my $string = 'abcdefghi';

if( $string =~ /(abc)def(ghi)/ ) {
    print "I found  and \n";
    }

всегда проверяйте, что совпадение или замена были успешными перед использованием $1 и так далее. В противном случае вы можете забрать остатки от другой операции.

регулярные выражения Perl задокументированы в perlre.

$1, $2 и т. д. будет содержать значение захватывает от последней успешных матч-важно проверить, удалось ли матч, прежде чем обращаться к ним, т. е.

 if ( $var =~ m/( )/ ) { # use  etc... }

пример проблемы - $1 содержит "быстрый" в обоих операторах печати ниже:

#!/usr/bin/perl

'Quick brown fox' =~ m{ ( quick ) }ix;
print "Found: \n";

'Lazy dog' =~ m{ ( quick ) }ix;
print "Found: \n";

как указывали другие, $ x-это переменные захвата для регулярных выражений, позволяющие ссылаться на разделы согласованного шаблона.

Perl также поддерживает именованные захваты, которые могут быть проще для людей, чтобы помнить в некоторых случаях.

ввод: 111 222

/(\d+)\s+(\d+)/

$1-это 111

$2 - это 222

можно также сказать:

/(?<myvara>\d+)\s+(?<myvarb>\d+)/

$ + {myvara} is 111

$ + {myvarb} - это 222

Они называются "переменные соответствия". Как уже упоминалось ранее, они содержат текст из вашего последнего соответствия регулярному выражению.

дополнительная информация здесь:http://cslibrary.stanford.edu/108/EssentialPerl.html

(CTRL-F для 'Match Variables', чтобы найти соответствующий раздел)

на общие вопросы, касающиеся" волшебных " переменных в Perl, можно ответить, посмотрев в документации по предопределенным переменным Perl a la:

perldoc perlvar

однако, когда вы ищете эту документацию для $1 и т. д. Вы найдете ссылки в нескольких местах, кроме раздела об этих" цифровых " переменных. Вы должны искать

$<digits>

Я бы добавил Это Брайан либо путем комментирования или редактирования, но мне не хватает рэп. Если кто-то добавляет Это я удалю этот ответ.

Так как вы спросили группы захвата, вы можете также узнать о$+.. Очень полезный..

use Data::Dumper;
$text="hiabc ihabc ads byexx eybxx";
while($text=~/(hi|ih)abc|(bye|eyb)xx/igs)
{
    print Dumper $+;
}

выход:
$VAR1 = 'привет';
$VAR1 = 'ih';
$VAR1 = 'bye';
$VAR1 = 'eyb';

переменные $1 .. $9 также являются переменными только для чтения, поэтому вы не можете неявно присвоить им значение:

$1 = 'foo'; print $1;

это вернет ошибку: изменение значения только для чтения, предпринятое в строке скрипта 1.

вы также не можете использовать числа для начала имен переменных:

$1foo = 'foo'; print $1foo;

выше также вернет ошибку.

Я подозреваю, что их может быть столько, сколько 2**32 -1 нумерованные переменные соответствия, на 32-битном скомпилированном двоичном файле Perl.

Comments

    Ничего не найдено.