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_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

关于regex - Perl 单行匹配所有出现的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19031552/

相关文章:

regex - perl 正则表达式,删除捕获的内容

perl - 使用 Devel::Declare 创建新的 Perl 关键字

python - 正则表达式,选择最接近的匹配项

javascript - 从扑克之星历史中解析席位

javascript - 如何从 json/字符串中删除特殊字符和特定单词?

java - 用于拆分字符串以获取运算符的正则表达式

Javascript正则表达式如何将:"word1—word2"变为“word1 — word2”

c - SSL_CTX_new :unable to load ssl2 md5 routines

perl - Unix 加入两个以上的文件

linux - ftp 下载完成,但解压提示不正确