繁体   English   中英

Perl和正则表达式; $ 1为空

[英]Perl and Regular expression; $1 is empty

脚本:

$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有多少子表达式匹配?

请澄清。

为什么$ 1是空的?

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

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

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

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

如果您确实不想使用捕获组(如至少一个其他答案所述),则还可以在正则表达式上使用/ p选项,并使用${^MATCH}代替$1

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

这等效于将整个正则表达式包装在捕获组中:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM