Я хочу создать Perl-код, чтобы извлечь то, что в скобках и перенести его в переменную - PullRequest
0 голосов
/ 11 мая 2011

Я хочу создать Perl-код, чтобы извлечь то, что находится в скобках, и перенести его в переменную.«(05-NW) HPLaserjet» должен стать «05-NW» Что-то вроде этого:

  • Catch »(«
  • удаляет все пробелы, которые существуют между ()
  • все, что между () = переменная 1

Как мне поступить?

Ответы [ 3 ]

3 голосов
/ 11 мая 2011

Это работа для регулярных выражений. Выглядит сбивающим с толку, потому что в регулярном выражении в качестве метасимволов используются символы скобки, а также они являются частью шаблона в вашем примере, избегая обратной косой черты.

C:\temp $ echo (05-NW)HPLaserjet | perl -nlwe "print for m/\(([^)]+)\)/g"

Совпадение с начальной парой, начало группы захвата, совпадение с одним или несколькими символами, которые не являются закрывающей парой, закрытие группы захвата, совпадение с закрытием парена.

2 голосов
/ 11 мая 2011

Вы можете использовать регулярные выражения (см. perlretut ), чтобы сопоставить и зафиксировать значение. Присвоив список, вы можете поместить свои записи в именованные переменные. Глобальные переменные $1, $2 и т. Д. Также используются для групп захвата, поэтому вы можете использовать их вместо назначения списка, если хотите.

use strict;
use warnings;

while (<>) # read every line
{
  my ($printer_code) = m/
    \(              # Match literal opening parenthesis
      ([^\)]*)      # Capture group (printer_code): Match characters which aren't right parenthesis, zero or more times
    \)/x;           # Match literal closing parenthesis
    # The 'x' modifier allows you to add whitespace and comments to regex for clarity.
    # If you use it, make sure you use '\ ' (or '\s', etc.) for actual literal whitespace matching!
}

__DATA__
(05-NW)HPLaserjet
1 голос
/ 11 мая 2011

perldoc perlre

use warnings;
use strict; 

my $s = '(05-NW)HPLaserjet';
my ($v) = $s =~ /\((.*)\)/; # Grab everything between parens (including other parens)
$v =~ s/\s//g; # Remove all whitespace
print "$v\n";

__END__

05-NW

См. Также: Объяснения идиом Perl - @ary = $ str = ~ m / (материал) / г

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