簡體   English   中英

Perl正則表達式說明

[英]Perl regular expressions explanation

我希望得到一些解釋,我有以下腳本:

open (FILE, '2.txt');
@DNA = <FILE>;
$DNA = join ('', @DNA);

print "DNA = ". $DNA . "\n";

$a=0;
while ($DNA =~ //ig) {$a++;}
print "Total characters = ".$a."\n";

$b=0;
while ($DNA =~ /fl/ig) {$b++;}
print "Total fl = ".$b."\n";

$c=0;
while ($DNA =~ /[^fl]/ig) {$c++;}
print "Total character less fl = ".$c."\n";

exit;

文本文檔“ 2.txt”包含以下字符:

flkkkklllkkfewnofnewofewfl

運行腳本時,我得到以下輸出:

DNA = flkkkklllkkfewnofnewofewfl
Total characters = 27
Total fl = 2
Total character less fl = 16

我的問題是,為什么要做
while ($DNA =~ /fl/ig) {$b++;}如果一起計算fl的所有實例,

但是當我這樣做
while ($DNA =~ /[^fl]/ig) {$c++;}會計算
都不是f或and l(即f和l分別處理)。

我在尋找腳本來計算不是fl(即一起處理)的字符數

[fl]是字符類,表示fl
這並不意味着子串fl

因此[^fl]計算所有不是f或l的字符。

但是,您可以使用這樣的正則表達式來做到這一點-

/[^fl]|f(?!l)|(?<!f)l/

格式:

    [^fl]          # Not f nor l
 |  f (?! l )      # f not followed by l
 |  (?<! f ) l     # l not following f

保持簡單,可以考慮先刪除所有“ fl”的實例,然后簡單地計算剩余的字符:

$DNA =~ s/fl//g;
print "Total characters less fl = ".length($DNA)."\n";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM