我需要从包含字母和数字的文本文件中提取字符串。这些行就像这样开始
Report filename: ABCL00-67900010079415.rpt ______________________
我需要的是最后8个数字,所以在这个例子中将是10079415
while(<DATA>){
if (/Report filename/) {
my ($bagID) = ( m/(\d{8}+)./ );
print $bagID;
}
现在这打印出前8个,但我想要最后的8个。
答案 0 :(得分:6)
你只需要转义点,这样就可以匹配dot charcater之前存在的8位数字。
my ($bagID) = ( m/(\d{8}+)\./ );
.
是正则表达式中的一个特殊字符,可以匹配任何字符。为了匹配文字点,你必须要逃避它。
答案 1 :(得分:0)
要匹配任何内容的 last ,只需在其前面加上一个匹配尽可能多的字符的通配符
my ($bag_id) = / .* (\d{8}) /x
请注意,我还使用了/x
修饰符,以便正则表达式可以包含无关紧要的空白以便于阅读。此外,您的\d{8}+
就是所谓的占有量词;它用于优化一些正则表达式结构,并且在模式的末尾没有区别
答案 2 :(得分:-1)
这可能比人们想象的要复杂一点。
# m/\d{8}(?=\.[^.\s]+(?!\S))/
\d{8} # 8 digits before file extension
(?= # Ahead, generally force the dot to be a file extension
\. [^.\s]+ # Dot and extension
(?! \S ) # Must end on a whitespace boundary
)