我有数据,其中某些行可能在第二个字段中包含完整路径名。我需要确定这样一条线。
我找到了“How can I extract a file path from a Perl string?”,但我只是放弃了尝试。
我坚持使用包含字母数字,下划线,短划线和点的路径名称,其中的组件用斜杠/
分隔。
我想将这些示例视为路径名称:
/abc/qwert_yu.1234/now_at_file.name4
/_.123/zaqe/0987_123.666/how_deep/can-I-go
每个组件应该与qr(^[\w\.\-]+$)
之类的模式相匹配,并且我有这个工作。
我的问题是匹配包含任意数量段的路径,每个段前面都有正斜杠。
我尝试了很多这样的排列:
$dir_pat = qr(/($fpat))
当我测试时
p "/qwe.123_545-FFF" =~ $dir_pat
它只是不匹配。
答案 0 :(得分:4)
看起来你在问以下为什么不匹配。
my $fpat = qr(^[\w\.\-]+$);
my $dir_pat = qr(/($fpat));
"/qwe.123_545-FFF" =~ $dir_pat
禁用,您的模式如下:
/^[\w\.\-]+$
因此,您尝试匹配/
后跟字符串的开头。那永远不会匹配。你想要
^/[\w\.\-]+$
答案 1 :(得分:0)
您需要围绕整个模式的锚点,而不是每个路径段周围的锚点
use strict;
use warnings 'all';
use feature 'say';
for my $path (
'/abc/qwert_yu.1234/now_at_file.name4',
'/_.123/zaqe/0987_123.666/how_deep/can-I-go' ) {
say "ok" if $path =~ m|^(?:/[\w.-]+)+$|;
}
ok
ok