余分な区切りスペースを空白に置き換えることは知っていますが、=~ s/(.)\s/$1/segどういう意味ですか?$1seg
2181 次
2 に答える
5
これは空白を削除するための試みですが、少し不規則であり、意図的なものかどうかはわかりません。
s/(.) # match a single character, capture string into $1
\s # match a single whitespace
/ # replace with
$1 # the captured string from above
/seg # use these modifiers on the substitution
s.改行にも一致するようにワイルドカード文字の動作を変更しますe置換が Perl コードとして評価されるようにします。この場合、文字列を文字列に単純に評価するため、効果はありません。gグローバルの場合、デフォルトの 1 回だけではなく、可能な限り何度でも一致が実行されることを意味します。
a foo barこの置換の動作は、単一の空白を削除することです。これは、文字列を に変換しようとする可能性がありますafoobar。.ただし、複数の連続する空白の場合は、空白と一致するため、1 つおきに削除されます。a foo barとなりますafoo bar。これを改善するには、文字クラスに量指定子を追加して、\s複数回一致できるようにします\s+。
しかし、繰り返しますが、それを行う場合は、チェックをスキップして実行すること.もできますs/\s+//g。意図が非空白に続く空白のみを削除することである場合は、次のように の代わりに (非空白) を使用する方が賢明\Sです。.s/(\S)\s/$1/sg
私が言ったように、それはやや奇妙な置換です。
于 2013-09-15T11:14:29.630 に答える
3
$1最初のキャプチャ グループを参照します。(.)一致したものになります。
seg正規表現フラグの束です:
ss入力を一行として扱います。.また、一致するように指示し\nます (通常は一致しません)。e置換パターンを Perl 表現として扱いeます。s//すでに理解しているため、ここで何をするのか正確にはわかりません$1。gこの置換をg局所的に行うことを意味します (つまり、最初の出現だけではなく、文字列に出現するすべての場所)。
于 2013-09-15T11:14:21.493 に答える