Perl 和正则表达式; 1 美元是空的
脚本:
$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 是空的?
- 如何知道
aString
中有多少子表达式被匹配?
请澄清。
Script:
$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"
}
Output:
^^^^^^^^
This is Just a temp string just for fun ->true<-
^^^^^^^^
Questions:
- Why $1 is empty?
- How to know how much sub-expression in
aString
is matched?
Pls clarify.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的表达式中没有捕获组 (
()
)。也许你的意思是:一旦捕获了一些数据,您就可以按照自己的喜好进行测试。
Your expression has no capture groups (
()
) in it. Perhaps you mean:Once you have captured some data, you can test it however you like.
如果您确实不想使用捕获组(至少在另一个答案中提到过),您还可以在正则表达式和
${^MATCH}
上使用 /p 选项,而不是$1
:这相当于(?)将整个正则表达式包装在捕获组中:
If you really didn't want to use a capture group (as mentioned in at least one other answer), you can also use the /p option on the regular expression and
${^MATCH}
instead of$1
:This is equivalent(?) to wrapping your entire regular expression in a capture group: