我在变量中有一个字符串:
$mystr = "some text %PARTS/dir1/dir2/myfile.abc some more text";
现在%PARTS字面上存在于字符串中,它不是变量或散列。
我想从中提取子字符串%PARTS/dir1/dir2/myfile.abc
。我创建了以下reg表达式。我只是Perl的初学者。如果我做错了什么,请告诉我。
my $local_file = substr ($mystr, index($mystr, '%PARTS'), index($mystr, /.*%PARTS ?/));
我甚至试过这个:
my $local_file = substr ($mystr, index($mystr, '%PARTS'), index($mystr, /.*%PARTS' '?/));
但如果我打印$local_file
,两者都什么都不给。
这可能有什么问题?
谢谢。
更新:引用以下网站使用此方法:
答案 0 :(得分:4)
index
函数返回字符串中子字符串出现的第一个索引,否则为-1
。它与正则表达式无关。
使用绑定运算符 =~
将正则表达式应用于字符串。
要提取正则表达式的匹配区域,请将模式包含在parens(捕获组)中。匹配的子字符串将在$1
中提供:
my $str = "some text %PARTS/dir1/dir2/myfile.abc some more text";
if ($str =~ /(%PARTS\S+)/) {
my $local_file = $1;
...; # do something
} else {
die "the match failed"; # do something else
}
\S
字符类将匹配每个非空格字符。
要了解正则表达式,您可以查看perlretut
。
答案 1 :(得分:3)