余分な区切りスペースを空白に置き換えることは知っていますが、=~ s/(.)\s/$1/seg
どういう意味ですか?$1
seg
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
正規表現フラグの束です:
s
s
入力を一行として扱います。.
また、一致するように指示し\n
ます (通常は一致しません)。e
置換パターンを Perl 表現として扱いe
ます。s//
すでに理解しているため、ここで何をするのか正確にはわかりません$1
。g
この置換をg
局所的に行うことを意味します (つまり、最初の出現だけではなく、文字列に出現するすべての場所)。
于 2013-09-15T11:14:21.493 に答える