Я побежал Perl :: Критик на одном из моих сценариев, и получил это сообщение:Есть ли лучший способ писать регулярные выражения Perl с/x, поэтому код все еще легко читается?
Regular expression without "/x" flag at line 21, column 26. See page 236 of PBP.
я посмотрел информацию политики here, и я понимаю, что писать регулярные выражения в расширенном режиме поможет всем, кто ищет в коде.
Тем не менее, я зациклился на том, как конвертировать мой код, чтобы использовать флаг/x.
CPAN Пример:
# Match a single-quoted string efficiently...
m{'[^\\']*(?:\\.[^\\']*)*'}; #Huh?
# Same thing with extended format...
m{
' # an opening single quote
[^\\'] # any non-special chars (i.e. not backslash or single quote)
(?: # then all of...
\\ . # any explicitly backslashed char
[^\\']* # followed by an non-special chars
)* # ...repeated zero or more times
' # a closing single quote
}x;
Это имеет смысл, если вы только посмотрите на регулярное выражение.
Мой код:
if ($line =~ /^\s*package\s+(\S+);/) {
Я точно не знаю, как использовать расширенный регулярное выражение внутри, если заявление. Я могу написать вот так:
if (
$line =~/
^\s* # starting with zero or more spaces
package
\s+ # at least one space
(\S+) # capture any non-space characters
; # ending in a semi-colon
/x
)
{
И это работает, но я думаю, что это почти труднее читать, чем оригинал. Есть ли лучший способ (или лучший способ) написать это? Я думаю, я мог бы создать переменную с помощью qr //.
Я не ищу совета по повторному написанию этого конкретного регулярного выражения (хотя, если я могу его улучшить, я советую). Я больше ищу совет о том, как расширить регулярное выражение внутри если утверждение.
Я знаю Perl :: Критик - всего лишь ориентир, но было бы неплохо следовать за ним.
Заранее благодарен!
EDIT: Таким образом, после получения несколько ответов, то мне стало ясно, что создание регулярных выражений многострочного с комментариями не всегда необходимо. Люди, которые понимают основное регулярное выражение, должны уметь понимать, что делал мой пример, - комментарии, которые я добавил, были немного лишними и подробными. Мне нравится идея использования расширенного флага регулярных выражений, но все же вложение пространств в регулярное выражение, чтобы сделать каждую часть регулярного выражения немного более ясной. Спасибо за все входные данные!
У меня было перейдите на страницу http://www.perl.com/doc/manual/html/pod/perlre.html, чтобы узнать, что означало «\ A». Это предпочтительный способ вместо «^»? – BrianH
Я предполагаю, что раньше я не думал добавлять пробелы в однострочном регулярном выражении. Я всегда думаю о флаге «/ x» как о многострочном флаге, но мне очень нравится ваш пример выше. – BrianH
@BrianH: нет, не совсем. Это только имеет значение, если вы используете/m, а когда вы используете/m, вы обычно хотите ^, а не \ A. $, с другой стороны, часто используется там, где люди действительно имели в виду \ z. – ysth