如何获取 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
例如,我有一个以两个前斜杠开头的字符串。现在我想得到字符串“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