Что такое регулярное выражение для этого массива - PullRequest
3 голосов
/ 20 августа 2011

Допустим, у меня есть такое тело текста, как это

["What Color",["Red","Blue","Green","Yellow","Brown","White"]]

Какое регулярное выражение соответствует цвету

Я пробую это

 while ($mystring =~ m,/"(.*?)"/|,|[/"(.*?)"|,|/],g);
 print "Your Color is : [$1]\n";

Может кто-нибудь помочь мне это Perl скрипты должны печатать

 - Your Color is: Red
 - Your Color is: Blue
 - Your Color is: Green
 - Your Color is: Yellow
 - Your Color is: Brown
 - Your Color is: White

Ответы [ 2 ]

6 голосов
/ 20 августа 2011

Поскольку этот текст является допустимой строкой json, вы можете проанализировать ее с помощью JSON:

use JSON;  

my $json = '["What Color",["Red","Blue","Green","Yellow","Brown","White"]]';
print "- Your Color is: $_\n" for @{ decode_json($json)->[1] }
3 голосов
/ 20 августа 2011

Помимо того, что является допустимой JSON строкой, она также является допустимой структурой perl, которая может быть извлечена путем вычисления строки. Это не может быть практичным (или безопасным!) Для всех строк, но для этой конкретной, это работает:

use strict;
use warnings;
use feature qw(say);

my $h = eval("['What Color',['Red','Blue','Green','Yellow','Brown','White']]");
my $tag = $h->[0];
my @colors = @{$h->[1]};
say "- Your '$tag' is: $_" for (@colors);

Выход:

C:\perl>tx.pl
- Your 'What Color' is: Red
- Your 'What Color' is: Blue
- Your 'What Color' is: Green
- Your 'What Color' is: Yellow
- Your 'What Color' is: Brown
- Your 'What Color' is: White
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...