-3

余分な区切りスペースを空白に置き換えることは知っていますが、=~ s/(.)\s/$1/segどういう意味ですか?$1seg

4

2 に答える 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 に答える