在Perl中,如何使用一个正则表达式分组来捕获多个匹配它的事件到多个数组元素?
例如,对于字符串:
var1=100 var2=90 var5=hello var3="a, b, c" var7=test var3=hello
Run Code Online (Sandbox Code Playgroud)
用代码处理这个:
$string = "var1=100 var2=90 var5=hello var3=\"a, b, c\" var7=test var3=hello";
my @array = $string =~ <regular expression here>
for ( my $i = 0; $i < scalar( @array ); $i++ )
{
print $i.": ".$array[$i]."\n";
}
Run Code Online (Sandbox Code Playgroud)
我想看看输出:
0: var1=100
1: var2=90
2: var5=hello
3: var3="a, b, c"
4: var7=test
5: var3=hello
Run Code Online (Sandbox Code Playgroud)
我会用什么作为正则表达式?
我想在这里匹配的东西之间的共性是一个赋值字符串模式,所以类似于:
my @array = $string =~ m/(\w+=[\w\"\,\s]+)*/;
Run Code Online (Sandbox Code Playgroud)
其中*表示与该组匹配的一个或多个事件.
(我使用split()打折,因为有些匹配本身包含空格(即var3 ...),因此不会产生预期的结果.)
有了上面的正则表达式,我只得到:
0: var1=100 var2
Run Code Online (Sandbox Code Playgroud)
正则表达式是否可能?还是需要添加代码?
在查找"perl regex …
在Python中,编译的正则表达式模式有一个findall方法可以执行以下操作:
返回字符串中pattern的所有非重叠匹配,作为字符串列表.从左到右扫描字符串,并按找到的顺序返回匹配项.如果模式中存在一个或多个组,则返回组列表; 如果模式有多个组,这将是一个元组列表.结果中包含空匹配,除非它们触及另一个匹配的开头.
在Perl中执行此操作的规范方法是什么?我能想到的一个天真的算法是"当搜索并用空字符串替换成功时,做[套件]".我希望有一个更好的方式.:-)
提前致谢!