[英]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]
是字符類,表示f或l 。
這並不意味着子串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.