如何在perl中提取子字符串

时间:2016-03-30 10:09:43

标签: regex perl

我是perl的新手,需要你的帮助。

我正在读取目录中文件的内容。 我需要从包含std::string

的文件中提取子字符串

示例字符串:

*.dat

需要提取:

1) # **   Template Name: IFDOS_ARCHIVE.dat

2) # **  profile for IFNEW_UNIX_CMD.dat template  **

3) # ** Template IFWIN_MV.dat **

我的代码:

1) IFDOS_ARCHIVE.dat

2) IFNEW_UNIX_CMD.dat

3) IFWIN_MV.dat

我的正则表达式无效。 你有什么建议?

2 个答案:

答案 0 :(得分:1)

我觉得你会用以下的东西做得更好:

while (<$jobprofile>) {
  if ( /(\S+)\.dat/ ) {
    print "$1\n";
  }
}

while用于确保您解析每一行)

正则表达式查找一系列非空白字符(\S),后跟.dat

围绕\S+的括号将该部分的匹配捕获到特殊变量$1中。

答案 1 :(得分:0)

试试这个

open my $fh,"<","file.txt";

while (<$fh>)
{   
    next if /^\s+/; #skip the loop for empty line 
    ($match) = /\s(\w+\.dat)/g; # group the matching word and store the input into the $match
    print "$match\n";
}

或者只是尝试perl one liner

perl -ne'    print $1,"\n" if (m/(\w+\.dat)/)    ' file.txt

或者你在linux上工作尝试linux命令来做到这一点

grep -ohP '\w+\.dat' one.txt

o仅显示匹配的元素

h用于显示无文件名的输出

对于perl正则表达式

P