Как я могу найти все соответствия к регулярному выражению в Perl?

Для iPhone в настоящее время нет никакого такого понятия как Открытый исходный код, поскольку NDA SDK Apple iPhone запрещает код публикации. Они также запрещают код регистрации любого сайта не-Apple или даже дискуссионных форумов не-Apple о разработке iPhone. Как только NDA истекает (будет он когда-нибудь?) мы начнем иметь приложения для iPhone С открытым исходным кодом.

21
задан Thomas Owens 12 November 2009 в 16:18
поделиться

4 ответа

A m // g в контексте списка возвращает все зафиксированные совпадения.

#!/usr/bin/perl

use strict; use warnings;

my $str = <<EO_STR;
Name=Value1
Name=Value2
Name=Value3
EO_STR

my @matches = $str =~ /=(\w+)/g;
# or my @matches = $str =~ /=([^\n]+)/g;
# or my @matches = $str =~ /=(.+)$/mg;
# depending on what you want to capture

print "@matches\n";

Однако похоже, что вы разбираете файл конфигурации в стиле INI. В этом случае я рекомендую Config :: Std .

47
ответ дан 29 November 2019 в 06:44
поделиться
my @values;
while(<DATA>){
  chomp;
  push @values, /Name=(.+?)$/;
}   
print join " " => @values,"\n";

__DATA__
Name=Value1
Name=Value2
Name=Value3
6
ответ дан 29 November 2019 в 06:44
поделиться

Вместо использования регулярного выражения вы можете предпочесть использовать грамматический движок, например:

Я привел фрагмент Parse :: ResDescent ответ перед SO. Однако Regexp :: Grammars выглядит очень интересно, и на него влияют правила и грамматики Perl6 .

Так что я подумал, что у меня есть взлом Regexp :: Grammars; -)

use strict;
use warnings;
use 5.010;

my $text = q{
Name=Value1
Name = Value2
Name=Value3  
};

my $grammar = do {
    use Regexp::Grammars;
    qr{
        <[VariableDeclare]>*

        <rule: VariableDeclare>
            <Var> \= <Value>

        <token: Var>    Name

        <rule: Value>   <MATCH= ([\w]+) >
    }xms;
};


if ( $text =~ $grammar ) {
    my @Name_values = map { $_->{Value} } @{ $/{VariableDeclare} };
    say "@Name_values";
}

Вышеприведенный код выводит Значение1 Значение2 Значение3 .

Очень хорошо! Единственное предостережение в том, что для этого требуется Perl 5.10 и что он может быть излишним для приведенного вами примера; -)

/ I3az /

0
ответ дан 29 November 2019 в 06:44
поделиться

Используйте модуль Config :: для чтения данных конфигурации. Для чего-то такого простого я мог бы обратиться к ConfigReader :: Simple . Приятно держаться подальше от сорняков, когда это возможно.

1
ответ дан 29 November 2019 в 06:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: