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

如果您真的不想使用捕获组(至少在另一个答案中提到),您还可以在正则表达式上使用 /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 回答