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

发布于 2024-12-26 07:14:57 字数 551 浏览 5 评论 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中有多少子表达式被匹配?

请澄清。

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:

  1. Why $1 is empty?
  2. How to know how much sub-expression in aString is matched?

Pls clarify.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

仙女 2025-01-02 07:14:57

为什么$1是空的?

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

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

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

一旦捕获了一些数据,您就可以按照自己的喜好进行测试。

Why $1 is empty?

Your expression has no capture groups (()) in it. Perhaps you mean:

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

How to know how much sub-expression in aString is matched?

Once you have captured some data, you can test it however you like.

俯瞰星空 2025-01-02 07:14:57

如果您确实不想使用捕获组(至少在另一个答案中提到过),您还可以在正则表达式和 ${^MATCH} 上使用 /p 选项,而不是$1

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

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

if( $aString =~ /(^This\sis.*just)/ )
{
    print $aString . " ->true<-\n" . "^^^^^^^^" ."$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:

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

This is equivalent(?) to wrapping your entire regular expression in a capture group:

if( $aString =~ /(^This\sis.*just)/ )
{
    print $aString . " ->true<-\n" . "^^^^^^^^" ."$1";
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文