私はPerlを使いこなしており、部分文字列/正規表現の機能をよりよく理解しようとしています。 [0] * "" <Perlの正規表現を使って部分文字列を返す
のeval * 0 *フレーム*> 33 * 1311875297587および1311875297587を返すようにしたい:送信:[31.8 48]
は、私は、このような
として文字列を持っていると言います。それは常にその形式になります。私はPerlを使ってどのようにこれを行うでしょうか?
と仮定すると、感謝
私はPerlを使いこなしており、部分文字列/正規表現の機能をよりよく理解しようとしています。 [0] * "" <Perlの正規表現を使って部分文字列を返す
のeval * 0 *フレーム*> 33 * 1311875297587および1311875297587を返すようにしたい:送信:[31.8 48]
は、私は、このような
として文字列を持っていると言います。それは常にその形式になります。私はPerlを使ってどのようにこれを行うでしょうか?
と仮定すると、感謝
"[48:31.8]は..." そして、$文字列である:文字列が一致しない場合
my ($number) = $string =~ /\*(\d+)\*eval\*/;
$number
は未定義になり、それ以外の場合はされます"*"
と"*eval*"
の間に数字が含まれています。何が価値があるために
パーフェクト、ありがとう! – Roger
私はその入力を '*'に分割し、部分文字列番号に基づいて解析します。ハックが少なく、より堅牢です。 – kevlar1818
if ($str =~ /\*(\d+)\*/) {
print $1;
}
、私は、これは、より堅牢な答えだと思う:
while(<STDIN>)
{
@fields = split(/\*/,$1) if(/(?<=>)([^<>])+(?><)/);
print "$fields[1]\n";
}
これは、あなたがそれらを必要とする場合は、あなたのすべてのフィールドへのアクセスを可能にし、固有の順序に依存しません。特定のフィールドを解析します。
while
ループは、必要な行単位の繰り返しに置き換えてください。しかし、テストするには、これをPerlスクリプトとして実行し、[48:31.8] Sent: >33*1311875297587*eval*0*frame[0]*"A"<
などの行に貼り付けてください。
my ($num) = '>33*1311875297587*eval*0*frame[0]*"A"<' =~ /(\d{3,})/;
print $num;
興味のある部分を特定する方法を説明します。少なくとも3桁の長さの文字列? ">"に続いて4文字目から始める? "* eval"の前の数字? etc ... – tadmc