1

私は最近\x、Perl のベスト プラクティスで修飾子について学んでおり、複数行のインデントやドキュメンテーションなどのクールなことを行うことができます。

$txt =~ m/^                     # anchor at beginning of line
      The\ quick\ (\w+)\ fox    # fox adjective
      \ (\w+)\ over             # fox action verb
      \ the\ (\w+) dog          # dog adjective
      (?:                       # whitespace-trimmed comment:
        \s* \# \s*              #   whitespace and comment token
        (.*?)                   #   captured comment text; non-greedy!
        \s*                     #   any trailing whitespace
      )?                        # this is all optional
      $                         # end of line anchor
     /x;                        # allow whitespace

しかし、文字列置換の検索/置換に相当することはできませんでしたか? 複雑な置換をより効果的に管理するために使用する必要がある、他の同様のベスト プラクティスはありますか?

編集これを例にとります:

$test =~ s/(src\s*=\s*['"]?)(.*?\.(jpg|gif|png))/${1}something$2/sig;

読みやすくするために、複数行/空白を使用してこれを文書化できる同様の方法はありますか?

どうもありがとう

4

4 に答える 4

1

を追加するだけで/x、コメントを許可するなど、正規表現部分を簡単に分割できます。

my $test = '<img src = "http://www.somewhere.com/im/alright/jack/keep/your/hands/off/of/my/stack.gif" />';

$test =~ s/
    ( src \s* = \s* ['"]? ) # a src attribute ...
    ( .*? 
      \. (jpg|gif|png)      # to an image file type, either jpeg, gif or png
    )
    /$1something$2/sigx     # put 'something' in front of it
    ;

/e置換を分割するには、評価スイッチ ( ) を使用する必要があります。ただし、一致部分の複数行は正常に機能します。

$1は有効な識別子ではないため、分離する必要がないことに注意して$1somethingください。したがって、少なくとも私のバージョンの Perl は混乱しません。

私が評価したほとんどの置換では、ブラケット スタイルの置換区切り文字を好みます。

$test =~ s{
      ( src \s* = \s* ['"]? ) # a src attribute ... '
      ( .*? 
        \. (jpg|gif|png)      # to an image file type, either jpeg, gif or png
      )
    }{
        $1 . 'something' . $2
    }sigxe 
    ;

よりコードのように見せるためです。

于 2013-02-19T00:07:14.187 に答える
0
s/foo/bar/

次のように書くことができます

s/
   foo     # foo
/
   "bar"   # bar
/xe
  • /xパターンに空白を許可する
  • /e置換式でコードを許可する
于 2013-02-18T23:05:43.050 に答える