Могу ли я разбить регулярное выражение Perl на несколько строк в моем коде? - программирование
Подтвердить что ты не робот

Могу ли я разбить регулярное выражение Perl на несколько строк в моем коде?

Мне просто интересно, могу ли я разбить длинное регулярное выражение, которое у меня есть в моем коде 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!" 

Я не уверен, как это сделать с регулярным выражением, поскольку он не использует кавычки. Если я нажимаю кнопку ввода, я предполагаю, что он поместит новый символ строки в мое регулярное выражение, сделав его ошибочным. Я хотел бы сделать что-то вроде:

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
4b9b3361

Ответ 1

Да, см. /x modifier на странице man perlre.

Ответ 2

Использовать модификатор без пробелов

На странице руководства perlre (1) говорится:

Модификатору "/x" нужно немного больше объяснений. Он сообщает анализатор регулярных выражений, чтобы игнорировать большинство пробелов, которые не являются назад или в классе символов. Вы можете использовать это, чтобы разбить ваше регулярное выражение в (слегка) более читаемые части.

Вы можете использовать это для создания многострочных выражений. Например:

/
  abcde_abcde_abdcae_adafdf_    # Have some comments, too. 
  abscd_casdf_asdfd_....asdfaf  # Here 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;

Ответ 3

Используйте символ +. Вот пример:

push @steps, $steps[-1] +
        $radial_velocity * $elapsed_time +
        $orbital_velocity * ($phase + $phase_shift) -
        $DRAG_COEFF * $altitude;