私の正規表現で余分な文字をperlが無視するのはなぜですか?
echo "a=-1"|perl -nle 'if (/.*=[0-9]*/){print;}'
a=-1
echo "a=-1"|perl -nle 'if (/.*=[0-9]*$/){print;}'
それは正しく無視します。どうして?
私の正規表現で余分な文字をperlが無視するのはなぜですか?
echo "a=-1"|perl -nle 'if (/.*=[0-9]*/){print;}'
a=-1
echo "a=-1"|perl -nle 'if (/.*=[0-9]*$/){print;}'
それは正しく無視します。どうして?
[0-9] *は、空の文字列を一致させることができた後、それは終わりではありません。あなたは、文字列の末尾に固定するとき、あなたはこの空の試合を防ぐ。
にあなたを
最初の例では、[0-9]は「*」回発生すると言います。つまり、「=」だけに一致します。「$」を追加するともう一致しません[0-9]。
正規表現が実際にマッチした文字列の部分だけを出力すると便利です。、行全体の代わりに。これは、あなたの正規表現がやっていることをより良い洞察を与えるでしょう。これは特別な$&
変数で行うことができます。だから、代わりに:
echo "a=-1"|perl -nle 'if (/.*=[0-9]*/){print;}'
あなたは今、別の出力を取得します使用
echo "a=-1"|perl -nle 'if (/.*=[0-9]*/){print $&;}'
:
a=
を、この新しい情報があなたの正規表現がどのように理解するのにヘッドスタートを与える可能性があり[入力データに関して動作します。