Perl - 查找字符串中的最后一个单词,包括带连字符的单词
Perl - Find last word in string including those with hyphens
我有一个 perl 脚本可以解析来自 Cisco ASA5500 网络设备的路由 table。我想捕获每一行的最后一个词以供进一步分析。典型的路线 table 条目看起来像...
C 123.201.2.12 255.255.255.252 直连,外
要获取每行的最后一个词,我使用:
$line =~ /(\b\w*\s*$)/;
print ."\n";
而且大部分时间都运行良好。但是,有些工程师在名称中加上了连字符,例如 dmoc-net。其输出只是单词 net。我明白为什么会发生这种情况,因为元字符 \w* 没有 -,它包含 [a-zA-Z0-9_]。有没有办法在一行中获取最后一个单词,包括那些带连字符的单词?
这个怎么样?
$line =~ /(\b(\w|[-])*\s*$)/;
print ."\n";
说明:您希望正则表达式匹配由 \w
表示的字符 class 和字符 -
中的元素组成的子字符串。您不能在语法上将其表示为 shorthand 表示法中的单个字符 class。但是,您始终可以将字符 class 表示为所述字符 class 的分区的成分之间的交替(尽管这样做通常没有意义;例如 [a-zA-Z0-9_]
等同于 ([a-z]|[A-K]|[L-Z0-3]|[4-9]|_)
).
因此,在您的情况下,您将概念字符 class [{{\w}}-]
(发明的临时语法)拆分为 (\w|[-])
.
我有一个 perl 脚本可以解析来自 Cisco ASA5500 网络设备的路由 table。我想捕获每一行的最后一个词以供进一步分析。典型的路线 table 条目看起来像...
C 123.201.2.12 255.255.255.252 直连,外
要获取每行的最后一个词,我使用:
$line =~ /(\b\w*\s*$)/;
print ."\n";
而且大部分时间都运行良好。但是,有些工程师在名称中加上了连字符,例如 dmoc-net。其输出只是单词 net。我明白为什么会发生这种情况,因为元字符 \w* 没有 -,它包含 [a-zA-Z0-9_]。有没有办法在一行中获取最后一个单词,包括那些带连字符的单词?
这个怎么样?
$line =~ /(\b(\w|[-])*\s*$)/;
print ."\n";
说明:您希望正则表达式匹配由 \w
表示的字符 class 和字符 -
中的元素组成的子字符串。您不能在语法上将其表示为 shorthand 表示法中的单个字符 class。但是,您始终可以将字符 class 表示为所述字符 class 的分区的成分之间的交替(尽管这样做通常没有意义;例如 [a-zA-Z0-9_]
等同于 ([a-z]|[A-K]|[L-Z0-3]|[4-9]|_)
).
因此,在您的情况下,您将概念字符 class [{{\w}}-]
(发明的临时语法)拆分为 (\w|[-])
.