如何获取 Perl 正则表达式中前斜杠后开始的字符串?

How to get the string which is starting after front slash in Perl regex?

例如,我有一个以两个前斜杠开头的字符串。现在我想得到字符串“foo_foo”。我怎么做?提前致谢。

my $str = "// filename : foo_foo";

if ($_ =~ m/^filename\s+:\s+(.+)/) {print "regex  \n";}

您可以使用

my $str = "// filename : foo_foo";
if ($str =~ m{^//\h*filename\s*:\s*(.+)}) {
    print "regex  \n";
}

online Perl demo。在这里,我使用了 {...} 正则表达式分隔符而不是 /.../ 并且模式现在看起来像 ^//\h*filename\s*:\s*(.+),匹配

  • ^ - 字符串开头
  • // - // 子字符串
  • \h* - 零个或多个水平空格
  • filename - 一些固定字符串
  • \s*:\s* - : 包含零个或多个空格的字符
  • (.+) - 第 1 组:一个或多个除换行字符外的字符尽可能多(贪心点)。

您填充 $str 但将匹配项绑定到 $_

使用不同的分隔符,这样您就不必转义斜线。

my $str = "// filename : foo_foo";
if ($str =~ m{^/+\s+filename\s+:\s+(.+)}) {
    print "regex: ''\n";
}

符合以下示例代码的内容应该会产生所需的结果。

use strict;
use warnings;
use feature 'say';

my $str = "// filename : foo_foo";

my($fname) = $str =~ m|// filename : (.*)\z|;

say $fname;

输出

foo_foo