带字母和数字的正则表达式

时间:2015-07-24 17:18:51

标签: regex perl

我需要从包含字母和数字的文本文件中提取字符串。这些行就像这样开始

Report filename: ABCL00-67900010079415.rpt ______________________

我需要的是最后8个数字,所以在这个例子中将是10079415

while(<DATA>){
if (/Report filename/) {
  my ($bagID) = ( m/(\d{8}+)./ );
  print $bagID;
}

现在这打印出前8个,但我想要最后的8个。

3 个答案:

答案 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
 )