2012-01-11 2 views
0

Сценарий:

$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" 
} 

Выход:

^^^^^^^^

Это Просто темп строка просто для удовольствия -> правда < -

^^^^^^^^

Вопросы:

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

Pls уточнить.

ответ

7

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

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

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

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

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

2

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

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

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

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