【问题标题】:Regex find keywords in code正则表达式在代码中查找关键字
【发布时间】:2014-04-16 07:40:35
【问题描述】:

我正在尝试在 perl 脚本中查找某些关键字。出于某种原因,我的正则表达式找不到关键字后跟;,我相信\n

例如,如果我正在搜索单词“print”,如果字符串包含,则下面的代码将找到 print

打印;

但如果是的话就不会

打印;

我当前的代码:

$keyword = "print";
if($string =~/\b$keyword\b/g)
{
    print "found";
}

【问题讨论】:

  • 根本不是一个好主意。可能是PPI 可能有用,但从未使用过!

标签: regex perl keyword


【解决方案1】:

使用PPI解析perl代码:

use strict;
use warnings;

use PPI;

my $src = do {local $/; <DATA>};

# Load a document
my $doc = PPI::Document->new( \$src );

# Find all the barewords within the doc
my $words = $doc->find( 'PPI::Token::Word' );
for (@$words) {
    print $_->content, "\n";
}

__DATA__
$keyword = "print";
if ($string =~/\b$keyword\b/g)
{
    print "found";
}

输出:

if
print

【讨论】:

  • 很好的解决方案!但是有没有办法简单地定制我的正则表达式来找到任何类型的词,即使它们在; 旁边?老实说,我仍然很惊讶\b 没有工作,或者以下两个答案。
  • 无法再帮助您解决您写的问题。您没有包含对您来说失败的实际工作示例。您说您有一个包含单词 print 的字符串,但无法匹配它。然后编辑您的帖子,以便您实际定义该字符串并尝试与之匹配,然后您将获得更好的帮助:How do I ask a good question?
【解决方案2】:
if ($keyword =~ m/\bprint\b\s?;?/sim) {
    # Successful match
} else {
    # Match attempt failed
}

【讨论】:

  • 不幸的是没有运气
【解决方案3】:

您可能需要引用您的变量。在正则表达式中使用 \Q 和 \E。例如 /\Q$var\E/g

更新:这有效

#!/usr/bin/perl -w
use strict;
use warnings;

my $keyword = "print";
my $string = 'print;';
if($string =~/\b$keyword\b/g)
{
    print "found";
}

【讨论】:

  • 查看我的更新。你能告诉我们你是如何分配变量的吗?
猜你喜欢
  • 2011-05-20
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 2015-05-26
相关资源
最近更新 更多