使用perl查找在模式之后和另一个模式之前的单词

时间:2016-09-25 00:26:28

标签: regex perl

我想在特定模式之后和特定模式之前的文件中找到一个单词。 以下是文件中的内容:

emplace_back

所以,我想单独获取单词print("Hi", "My name is", "Tej"); 并将其存储到数组中。类似地,我有许多这样的文件具有与上面类似的模式但具有不同的名称,所以我想将所有这些名称推送到数组中。即我想要来自模式Tej之后和模式print("Hi", "My name is", "之前的文件中的文字。

有时,逗号后面的空格不见了。

我编写了打开文件的脚本,并将文件句柄传递给函数,以搜索模式之前和之后的单词。该函数的代码如下:

");

我知道正则表达式不起作用,但我不确定如何找到我需要的单词。任何提供的帮助表示赞赏。 谢谢

1 个答案:

答案 0 :(得分:-1)

这是我将如何做到的:

sub search {                                    
    my $file_handle = shift;
    while (<$file_handle>) {
        if (/print\("Hi", ?"My name is", ?"([^"]+)"\);/) {
            push @array, $1;
        }
    }
}

我转义了正则表达式中的特殊字符(在本例中为()),我使用"([^"]+)"来匹配引号内的所有非引号。

空格后面的问号使空格的存在可选。