Что такое регулярное выражение для сопоставления одной строки с множественным соответствием? - PullRequest
0 голосов
/ 31 августа 2010
$str = "Data = [ {"name": "test","Address": "UK" "currency": "£" },{"name": "test2","Address": "US" "currency": "$" },{"name": "test","Address": "eur" "currency": "E" }

Я хочу отобразить все адреса

это не многострочная строка.Это все одна строка

Пожалуйста, помогите на этом

Спасибо, TREE J

Ответы [ 4 ]

3 голосов
/ 31 августа 2010

Ваша строка в формате JSON! Относитесь к этому !

edit : я идиот и не могу сказать, когда вопрос помечен как perl вместо PHP :-) Ссылка исправлена.

2 голосов
/ 31 августа 2010

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

#!/usr/bin/perl

use strict;
use warnings;

use JSON;

my $input  = <DATA>;
my ($json) = $input =~ /DATA = (.*)/;
my $data   = decode_json $json;

for my $record (@$data) {
    print "$record->{name} has address $record->{Address}\n";
}

__DATA__
DATA = [ {"name": "test",  "Address": "UK", "currency": "£" }, {"name": "test2", "Address": "US", "currency": "$" }, {"name": "test",  "Address": "eur", "currency": "E" } ]
2 голосов
/ 31 августа 2010

Это должно работать:

while ($str =~ /\"Address\":\S+\"(.*?)\"/g) {
      print "Address = $1\n";
}
0 голосов
/ 31 августа 2010

что-то вроде:

my $str = q(Data = [ {"name": "test","Address": "UK" "currency": "£" },{"name": "test2","Address": "US" "currency": "$" },{"name": "test","Address": "eur" "currency": "E" });
my @addresses = $str =~ /"Address":\s*"([^"]*)"/g;
print "@addresses\n";

НТН,

Пол

(PS: отправлять реальный код, а не псевдокод ...)

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