Perl и регулярное выражение; $ 1 пусто - PullRequest
0 голосов
/ 11 января 2012

Сценарий:

$aString = "This is Just a temp string just for fun";

print '^^^^^^^^' . "\n";

if( $aString =~ /^This\sis.*just/ )
{
    print $aString . " ->true<-\n" . "^^^^^^^^" ."$1";
}
else
{
    print $aString . " ->false<-\n" . "^^^^^^^^" ."$1"
}

Выход:

^^^^^^^^

Это просто временная строка для развлечения -> правда <- </p>

^^^^^^^^

Вопросы:

  1. Почему $ 1 пусто?
  2. Как узнать, сколько подвыражений в aString соответствует?

Просьба уточнить.

Ответы [ 2 ]

7 голосов
/ 11 января 2012

Почему $ 1 пусто?

В вашем выражении нет групп захвата (()).Возможно, вы имеете в виду:

$aString =~ /^This\sis(.*)just/

Как узнать, какое количество подвыражений в aString соответствует?

Как только вы захватили некоторые данные, вы можете проверить их, однакотебе нравится.

2 голосов
/ 11 января 2012

Если вы действительно не хотите использовать группу захвата (как упоминалось хотя бы в одном другом ответе), вы также можете использовать параметр / p в регулярном выражении и ${^MATCH} вместо $1:

if( $aString =~ /^This\sis.*just/p )
{
    print $aString . " ->true<-\n" . "^^^^^^^^" ."${^MATCH}";
}

Это эквивалентно (?) Переносу всего вашего регулярного выражения в группу захвата:

if( $aString =~ /(^This\sis.*just)/ )
{
    print $aString . " ->true<-\n" . "^^^^^^^^" ."$1";
}
...