Regex Perl一行程序匹配所有出现的正则表达式

Regex Perl一行程序匹配所有出现的正则表达式,regex,perl,Regex,Perl,对于与此类似的多行文本: "views_panes","gw_hero_small_site_placement-panel_pane_1",1,"a:0:{}","a:10:{s:14:\"override_title\";i:1;s:19:\"override_title_text\";s:0:\"\";s:9:\"view_mode\";s:11:\"all_purpose\";s:11:\"image_style\";s:7:\"default\";s:13:\"style_option

对于与此类似的多行文本:

"views_panes","gw_hero_small_site_placement-panel_pane_1",1,"a:0:{}","a:10:{s:14:\"override_title\";i:1;s:19:\"override_title_text\";s:0:\"\";s:9:\"view_mode\";s:11:\"all_purpose\";s:11:\"image_style\";s:7:\"default\";s:13:\"style_options\";a:2:{s:10:\"show_image\";i:0;s:9:\"show_date\";i:0;}s:18:\"gw_display_options\";s:22:\"gw_all_purpose_sidebar\";s:13:\"show_readmore\";a:1:{s:18:\"show_readmore_link\";i:0;}s:14:\"readmore_title\";s:9:\"Read more\";s:13:\"readmore_link\";s:0:\"\";s:7:\"exposed\";a:1:{s:23:\"field_hero_sub_type_tid\";s:3:\"547\";}}","a:0:{}","a:1:{s:8:\"settings\";N;}","a:0:{}","a:0:{}",0,"s:0:\"\";"
我希望匹配
(s:)(\d{1,}:)\“(string)\”的所有实例要获得类似以下内容:

s:14:override_title
s:18:show_readmore_link
s:3:547
这行有或没有
/g
仅打印第一个实例:

perl -nle 'print  "$1 $2 $3"  if /(s:)(\d{1,}:)\\"(.*?)\\";/g' tmp.txt

s:14:override_title
我想我可以尝试将它放在一个perl脚本中,将所有匹配项放入一个数组中,但我希望使用一个单行程序(-:我缺少什么


Mac OS X 10.7.5、perl 5.12.3.

您似乎只有一行,所以请尝试一下:

perl -nle 'print  "$1 $2 $3"  while(/.*?(s:)(\d{1,}:)\\"(.*?)\\";/g)' tmp.txt

那不是字符串JSON吗?@M42:我不确定。如果它是…,那会有帮助吗?@M42:不认为是,即使它被包装在
[]
{}
@NeilSlater:你说得对,我的坏蛋。@M42部分可以使用
PHP::Serialization
反序列化。非常好用,谢谢!所以如果
不起作用,因为一旦它达到第一个匹配,所有条件都满足,它就停止了?我能调试一下吗?