Как я могу сделать часть регулярного выражения Perl необязательной? - PullRequest
3 голосов
/ 21 сентября 2010

Я хочу матч

 my @array = ( 'Tree' , 'JoeTree');

    foreach (@array ) {
      if ( $_ =~ /^(Joe)Tree/gi) {
        print "matched $_";
      }
    }

Это соответствует только JoeTree. Это не соответствует Дерево?

Ответы [ 2 ]

10 голосов
/ 21 сентября 2010

Попробуйте:

if (/^(?:Joe)?Tree/gi)
  • Мы сделали необязательной деталь Joe.
  • Также вы можете изменить (..) на (?:...), поскольку вы просто группируете.
  • Также часть $_ =~ является избыточной, так как по умолчанию мы регистрируем $_
5 голосов
/ 21 сентября 2010

Вы пропустили ?: /^(Joe)?Tree/gi

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...