19

Perlコードにある長い正規表現を分割して、数行にわたって記述できるかどうか疑問に思っていました。コードの完成後にコードを表示する可能性のある人にとっては、読みやすさとコンパクトさを損なわないようにしたいと思います。私は、Perlで文字列が数行に分割される方法に類似した何かを探しています。例えば:

print "This is a string that is ". #1st line
      "very long, so it is on 2 lines!"; #2nd line
# prints = "This is a string that is very long, so it is on 2 lines!" 

正規表現は引用符を使用しないため、これを行う方法がわかりません。Enterキーを押すと、正規表現に改行文字が挿入されて誤ってしまうと思います。私は次のようなことをしたいと思います。

if($variable_1 = /abcde_abcde_abdcae_adafdf_      #1st regex line
                 abscd_casdf_asdfd_....asdfaf/){ #regex continued
    # do something
} # regex looking for pattern = abcde_abcde_abdcae_adafdf_abscd_casdf_asdfd_....asdfaf
4

3 に答える 3

26

空白に依存しない修飾子を使用する

perlre(1)のマニュアルページには次のように書かれています。

「/x」修飾子自体にはもう少し説明が必要です。これは、正規表現パーサーに、バックスラッシュされていない、または文字クラス内にないほとんどの空白を無視するように指示します。これを使用して、正規表現を(少し)読みやすい部分に分割できます。

これを使用して、複数行の式を作成できます。例えば:

/
  abcde_abcde_abdcae_adafdf_    # Have some comments, too. 
  abscd_casdf_asdfd_....asdfaf  # Here's your second line.
/x

文字通りのスペース

一致にスペースが含まれる場合は、/ x修飾子を使用するときに、正規表現でスペースを明示的にする必要があります。たとえば/foo bar baz quux/x、スペースで区切られた文字列は、期待どおりに一致しません。代わりに、次のようなものが必要です。

print "true\n" if
    /
        foo
        \s+  # You need explicit spaces...
        bar
        \s+  # because the modifier will...
        baz
        \s+  # otherwise ignore literal spaces.
        quux
    /x;
于 2012-07-25T14:33:28.457 に答える
9

/x modifierはい、perlreのmanページを参照してください。

于 2012-07-25T14:21:35.570 に答える
0

+記号を使用してください。次に例を示します。

push @steps, $steps[-1] +
        $radial_velocity * $elapsed_time +
        $orbital_velocity * ($phase + $phase_shift) -
        $DRAG_COEFF * $altitude;
于 2015-09-04T09:55:08.200 に答える