Perl和正则表达式; 1美元是空的

时间:2012-01-11 13:32:43

标签: regex perl regex-greedy

脚本:

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

输出:

  

^^^^^^^^

     

这只是一个只是为了好玩的临时字符串 - &gt; true&lt; -

     

^^^^^^^^

问题:

  1. 为什么1美元是空的?
  2. 如何知道aString中的子表达式匹配多少?
  3. 请澄清。

2 个答案:

答案 0 :(得分:7)

  

为什么1美元是空的?

您的表达式中没有捕获组(())。也许你的意思是:

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

如何知道aString中的子表达式匹配多少?

一旦捕获了一些数据,您可以根据需要进行测试。

答案 1 :(得分:2)

如果你真的不想使用捕获组(至少在其他一个答案中提到),你也可以使用正则表达式上的/ p选项和${^MATCH}而不是{{1} }:

$1

这相当于(?)将整个正则表达式包装在捕获组中:

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