2

\x00null で区切られたデータを解析しようとしています。-pe/-neループでは、置換正規表現のパターンマッチング側 $_と同等だと思いました...しかし、私の例が示すように、それらは同じではありません....*

                                                  #      ↓↓‾‾ works, but is not a regex
printf 'aaa\n\0bbb\n\0' | perl -ne 'BEGIN{ $/="\0"; }; s/$_/\"$.$&\"/ and print;' |xxd
printf 'aaa\n\0bbb\n\0' | perl -ne 'BEGIN{ $/="\0"; }; s/.*/\"$.$&\"/ and print;' |xxd
                                                  #      ↑↑__ gives un-expected output

# output                                          #      ↓       ↓ 
0000000: 2231 6161 610a 0022 2232 6262 620a 0022  "1aaa..""2bbb.."
0000000: 2231 6161 6122 0a00 2232 6262 6222 0a00  "1aaa".."2bbb"..
                                                  #    ↑       ↑

s/ / /完全な を認識するために置換のタイプを取得するには何が必要$_ですか?

4

1 に答える 1

5

.修飾子を使用し\nないと一致しません。/s

printf 'aaa\n\0bbb\n\0' | perl -ne 'BEGIN{ $/="\0"; }; s/.*/\"$.$&\"/s and print;' |xxd

の代わりに、文字クラスを使用することもできます.

printf 'aaa\n\0bbb\n\0' | perl -ne 'BEGIN{ $/="\0"; }; s/[\s\S]*/\"$.$&\"/ and print;' |xxd

ここでは、[\s\S]任意のスペースまたは非スペース文字 (つまり、任意の文字) に一致します。

于 2012-08-16T23:02:20.210 に答える