2012-12-05 55 views
2

我正在寻找一个perl代码行,可能包含正则表达式和注释 我需要捕获所有内容,直到发表评论。所以我希望所有的字符,直到#但我在拍摄# 例如有兴趣,如果线路是:我想匹配任何不包括'#'但是包括'#'

if ($line=/\#/) { #captures lines with '#' 

我想捕捉:

if ($line=/\#/) { 
+0

'([^#\\] | \\。)*' – Bergi

+0

'\\#'怎么办?那么'\\\#'呢?那么'''''''''''' – memowe

+0

谢谢。你能解释一下吗? –

回答

0

试试这个

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

查看它here on Regexr

这将匹配从s的开始特林(^),这不是一个#([^#]OR 一个#由一个反斜杠preceeded((?<=\\)#

+0

可能是语义的,但正则表达式不捕获任何东西,因为它被非捕获括号括起来:'(?:...)'。它尽管_match_字符串。想想我需要更多的咖啡来让我不那么迂腐的心情。 ;) – garyh

+0

'<='是什么意思? –

+1

@IlyaSchenberger,这是[“look-behind”](http://perldoc.perl.org/perlre.html#(?<= pattern) - \ K)它的意思是“只有前面有一个...” – Axeman

3

这给一试:

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; 

这应该处理几乎所有除了here-docs。如果您需要处理这些问题,请首先复制PPI :: Document :: serialize并将其修改为在第一条评论中停止。

相关问题