次のようなテキストがあるとします。
|-SAMPLE-D2
|---SAMPLE-D1
|---SAMPLE3
|の後の「-」の数を数えたい。perlで次の正規表現を使用して解析しようとしました
$count=()= /-/g;
しかし、最初の 2 つは "-" がテキストの別の場所と前にあるため、問題があります。「|」の直後に「-」の数を取得するには、どのように正規表現を作成するか、perl で他の関数を使用する必要がありますか?
開始後のダッシュに一致する正規表現|
:
/^\|([\-]*)/
縦線が最初にしか来ない場合は、次のようにしてマイナスを繰り返す文字列を取得できます。
my ($match) = $txt =~ /^\|(-*)/;
$match を囲む括弧により、正規表現のキャプチャされた部分がそれに入れられます
次に、を使用してマイナスの数を取得します
my $minus_count = length($match || '');
の
|| '')
少し
上記の正規表現で一致がまったく見つからなかった場合に $match を初期化して、初期化されていない変数に関する長さのうめき声を停止します (警告がオンになっている場合)
文字が前に付いていないダッシュをカウントするには、否定の後読みアサーションを使用します。
$count = () = /(?<!\w)-/g
正規表現で直接数えることができるかどうかはわかりませんが、キャプチャ グループを抽出し、文字列の長さで簡単な計算を行うことができます。
#!/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);