2013-04-25 61 views
0

我正在使用正则表达式搜索目录中的关键字列表。这里是我当前的代码:如何在perl中显示确切的搜索关键字

if (/$search/i) 
    { 

     printf $out "%s\t%s\n",$File::Find::name,$1;  
    } 

在我上面的代码$1是只给关键字词组。 但我想要整个关键字。

例如:我在寻找 “扫”

电流输出:C:\ac\acfrd\file.sql SWEEP。 但该文件包含单词“SWEEP_ID”,我希望输出为“SWEEP_ID”,而不是“SWEEP”。

回答

5

试试这个正则表达式:

/\b(\w*$search\w*)\b/i 

它抓住了你的搜索条件和可选的相邻字符号\w - 字母,数字等)进入$1。捕获的字符序列被字边界包围\b - 标点符号,空格,字符串开始或结束)。

上面的正则表达式允许在搜索词前后添加额外的单词符号。如果你只想让其他符号后您的搜索字词(如你的例子),只是删除了第一\w*

/\b($search\w*)\b/i 

如果你不想靠“字符号”的Perl的定义,然后用你自己的角色类替换\w,例如(只允许字母和下划线):

/\b([_a-z]*$search[_a-z]*)\b/i 
+1

如果从'\ w',你需要从移开搬走'\ b'。最后一个应该是:'/(?<![_ a-z])([_ a-z] * $ search [_a-z] *)(?![_ a-z])/ i' /(?<![_ \ pL])([_ \ pL] * $ search [_ \ pL] *)(?![_ \ pL])/ i') – ikegami 2013-04-25 14:09:36

+0

@ikegami:我不想去太深,解释前瞻/后视,但实际上你是对的......感谢您指出这一点。对您的评论+1。 – 2013-04-25 18:12:01

+0

@AlexShesterov:它在工作感谢您的帮助。我是perl的begineer,你能帮我找到任何网站,我可以在哪里更详细地了解perl。 – Ramesh 2013-04-26 05:15:34

0
/($search\S+)/ 

这可能会工作,但你的问题是不明确......