Regex 我想匹配任何不包括'#';但是是的,包括'\#';

Regex 我想匹配任何不包括'#';但是是的,包括'\#';,regex,perl,Regex,Perl,我正在寻找可能包含regexp和注释的perl代码行 我需要捕获所有内容,直到发表评论。所以我想要所有角色直到#但我对捕捉感兴趣# 例如,如果该行为: if ($line=/\#/) { #captures lines with '#' 我想捕捉: if ($line=/\#/) { 试试这个 ^(?:[^#]|(?<=\\)#)+ 试试看: use PPI; my $ppi = PPI::Document->new('source.pl'); my $source = ''

我正在寻找可能包含regexp和注释的perl代码行 我需要捕获所有内容,直到发表评论。所以我想要所有角色直到#但我对捕捉感兴趣# 例如,如果该行为:

if ($line=/\#/) {  #captures lines with '#'
我想捕捉:

if ($line=/\#/) {
试试这个

^(?:[^#]|(?<=\\)#)+
试试看:

use PPI;
my $ppi = PPI::Document->new('source.pl');
my $source = '';
for my $token ( @{ $ppi->find("PPI::Token") } ) {
    last if $token->isa("PPI::Token::Comment");
    $source .= $token;
}
print $source;

除了这里的文档之外,这应该可以处理几乎所有的事情。如果你需要处理这些问题,从复制PPI::Document::serialize开始,并修改它以停止第一条评论。

关于
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ted字符串不需要转义(除非使用了/x标志);上面的代码相当于
if($line=/#/){
(也应该完整地捕获它,正如我猜想的那样,
print qx#echo没有那么容易#
)可能是语义,但正则表达式没有捕获任何东西,因为它被非捕获括号包围:
(?:…)
。但它确实与字符串匹配。我想我需要更多的咖啡来让我不那么学究气。@IlyaSchenberger,这是一个,它的意思是“只有在前面加一个…”