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

出力:

^^^^^^^^

これは単なる楽しみのための一時的な文字列です ->true<-

^^^^^^^^

質問:

  1. なぜ $1 は空なのですか?
  2. aString一致するサブ式の数を知る方法は?

明確にしてください。

4

2 に答える 2

7

なぜ $1 は空なのですか?

式にキャプチャ グループ ( ()) が含まれていません。おそらくあなたは次のことを意味します:

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

aString の部分式がどれだけ一致しているかを知る方法は?

データを取得したら、好きなようにテストできます。

于 2012-01-11T13:35:46.700 に答える
2

(少なくとも1つの他の回答で述べられているように)キャプチャグループを本当に使用したくない場合は、正規表現で/pオプションを使用することもでき${^MATCH}ます$1

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

これは、正規表現全体をキャプチャグループでラップするのと同じです(?)。

if( $aString =~ /(^This\sis.*just)/ )
{
    print $aString . " ->true<-\n" . "^^^^^^^^" ."$1";
}
于 2012-01-11T14:17:43.460 に答える