簡體   English   中英

perl正則表達式只在文本的前面找到模式

[英]perl regular expression finding pattern only in the front of the text

假設有這樣的文字:

|-SAMPLE-D2
|---SAMPLE-D1
|---SAMPLE3

我想在|后計算“ - ”的數量。 我試圖通過在perl中使用以下正則表達式來解析它

$count=()= /-/g;

但這是有問題的,因為前兩個在文本和前面的其他地方都有“ - ”。 我應該如何形成我的正則表達式或使用perl中的其他函數來在“|”之后得到“ - ”的數字?

正則表達式匹配起始后的破折號|
/^\\|([\\-]*)/

要計算前面沒有字母的短划線,請使用負面的后置斷言

$count = () = /(?<!\w)-/g

如果垂直線只在開始時出現,你可以得到一串重復的缺點:

my ($match) = $txt =~ /^\|(-*)/;

$ match周圍的括號會將正則表達式的捕獲部分放入其中

然后獲取使用的最小數量

my $minus_count = length($match || '');

|| '')

如果上面的正則表達式根本找不到匹配項,則初始化$ match,以停止對未初始化變量的長度呻吟(如果您有警告)

不確定你是否可以直接計入Regex,但是你可以提取捕獲組並使用它們的字符串長度進行簡單的算術運算:

#!/usr/bin/perl
use warnings;
my $inFile = $ARGV[0];
open(FILEHANDLE, "<", $inFile) || die("Could not open file ".$inFile);
my @fileLines = <FILEHANDLE>;
my $lineNo = 0;
my $rslt;

foreach my $line(@fileLines) {
    chomp($line);
    $line =~ s/^\s+//;
    $line =~ s/\s+$//;
    $lineNo++;
    print "\n".$lineNo." = <".$line.">";
    if($line =~ m/^\|-+(.+)/) {
        my $text = $1;
        print "\n\ttext = <".$text.">";
        my $minCnt = length($line) - length($text) - 1;
        print "\n\tminus count = <".$minCnt.">";
    }
}
close(FILEHANDLE);

暫無
暫無

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

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