我正在使用正则表达式在目录中搜索关键字列表。这是我目前的代码:
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”。
答案 0 :(得分: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 :(得分:0)
/($search\S+)/
这可能有效,但您的问题并不清楚......