如何在perl中显示确切的搜索关键字
问题描述:
我正在使用正则表达式搜索目录中的关键字列表。这里是我当前的代码:如何在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”。
答
试试这个正则表达式:
/\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
答
/($search\S+)/
这可能会工作,但你的问题是不明确......
如果从'\ w',你需要从移开搬走'\ b'。最后一个应该是:'/(? ikegami 2013-04-25 14:09:36
@ikegami:我不想去太深,解释前瞻/后视,但实际上你是对的......感谢您指出这一点。对您的评论+1。 – 2013-04-25 18:12:01
@AlexShesterov:它在工作感谢您的帮助。我是perl的begineer,你能帮我找到任何网站,我可以在哪里更详细地了解perl。 – Ramesh 2013-04-26 05:15:34