我有一个大的多行文件来解析,我已经在Perl中陷入了一个单一的字符串。所以它最终是这样的:如何在perl regex中捕获一个字符串的多个“伙伴”?
my $string = "foo1 randomtext bar1 randomtext bar2 randomtext bar3/foo2 randomtext bar4 randomtext bar5 randomtext bar6 bar7/foo3 randomtext bar8 randomtext bar9/";
它由一组记录的,每一个都带有一个头条目(foo+number)
并且每个由符号分开;在这种情况下为"/"
。
我试图捕获每个条目(条形码+数字)中的标题信息(foo)和一些文字。在每种情况下,我想要捕获与“bar”的每个实例配对的标题信息,以维护每个条目中特定的foo和bar关系。
我所要的输出是这样的:
foo1_bar1
foo1_bar2
foo1_bar3
foo2_bar4
foo2_bar5
foo2_bar6
foo2_bar7
foo3_bar8
foo3_bar9
我已经后.
+,使之最小而不是最大尝试了各种正则表达式的,用的?
组合,包括后配套\/
记录分隔符(酒吧\ d)(这使得它仅查找记录的最后一个栏,而不是第一),
while ($string =~ m/(foo\d).+?(bar\d)+/g)
{
print "$1_$2\n";
}
返回
foo1_bar1
foo2_bar4
foo3_bar8
所以只是每个foo的第一个酒吧。 (bar\d)
之后基本上+
不会使这是一个多重匹配,这就是我的问题。
有什么想法?
请显示数据的原始结构slupring – beasy 2015-04-02 20:20:55
foo1 hfgvkjsdhfjghnsdlkjfg \ n lkhdlkgalkdngf之前\ n; ljfdlkhgnlkdfn \ n BAR1 kjbfdgkjbadkjgbkajdfg \ n kjbfdjgjadfg \ n ljbdfjglnadfg BAR2,jbdfjbadfjbd \ n \ n \ n \ n \ n lhafdgklnaldfglkafd BAR3 lkandfglkhnadfgn \ n \ n ladfglhaf \ n lknadfga/foo2 lahfeglkhaflgk等等等等等等等等(你可以得到图片 - 无法在评论框中输入'actual'回车...) – vienneseFinger 2015-04-02 20:23:26
作为评论,全球比赛像你想要的那样工作并且忽略了什么返回所有foos与尾部酒吧将给foo1_bar1,foo1_bar2,foo1_bar3,foo1_bar4,foo1_bar5 ...因为中间foos会被同样忽略,仍然没有给你期望的结果。 – Oesor 2015-04-02 20:31:01