2010-08-31 169 views
-2
$str = "Data = [ {"name": "test","Address": "UK" "currency": "£" },{"name": "test2","Address": "US" "currency": "$" },{"name": "test","Address": "eur" "currency": "E" } 

我要显示所有地址什么是匹配单行与多重匹配的正则表达式?

其不支持多行字符串。这一切都一个字符串

请在这个

感谢帮助, TREEĴ

回答

2

这应该工作:

while ($str =~ /\"Address\":\S+\"(.*?)\"/g) { 
     print "Address = $1\n"; 
} 
+0

不,g修饰符确保获得所有匹配! – ennuikiller 2010-08-31 16:07:09

+0

对不起我的错误! – Tree 2010-08-31 16:08:37

3

你的字符串是JSON! Treat it as such

编辑:我是个白痴,无法分辨问题标记为perl而不是PHP :-)链接被修正。

+0

修正,棒材'数据='开头。你从哪里得到数据? – fredley 2010-08-31 15:58:37

0

类似:

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"; 

HTH,

保罗

(PS:后实际的代码,而不是伪代码...)

2

你通过使用正确的工具来完成这项工作。在这种情况下,你修复损坏的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" } ]