【发布时间】:2020-09-25 21:30:05
【问题描述】:
我试图在任意字符串中获取一组模式的所有出现,就像这样:
my $STRING = "I have a blue cat. That cat is nice, but also quite old. She is always bored.";
foreach (my @STOPS = $STRING =~ m/(?<FINAL_WORD>\w+)\.\s*(?<FIRST_WORD>\w+)/g ) {
print Dumper \%+, \@STOPS;
}
但结果不是我所期望的,我也不完全明白为什么:
$VAR1 = {
'FINAL_WORD' => 'old',
'FIRST_WORD' => 'She'
};
$VAR2 = [
'cat',
'That',
'old',
'She'
];
$VAR1 = {
'FINAL_WORD' => 'old',
'FIRST_WORD' => 'She'
};
$VAR2 = [
'cat',
'That',
'old',
'She'
];
$VAR1 = {
'FINAL_WORD' => 'old',
'FIRST_WORD' => 'She'
};
$VAR2 = [
'cat',
'That',
'old',
'She'
];
$VAR1 = {
'FINAL_WORD' => 'old',
'FIRST_WORD' => 'She'
};
$VAR2 = [
'cat',
'That',
'old',
'She'
];
如果没有更好的解决方案,我可以接受 @STOPS 最后的内容并省略循环。但我更愿意单独获取每对匹配项,但我没有办法。
但是为什么循环会执行多次呢?
提前谢谢你,问候,
迷宫
【问题讨论】:
-
结果如何?你期待什么?
-
我没有发布完整的结果,因为它相当长。我应该这样做还是尝试描述结果?我的预期有点模糊,但上面记录了我正在寻找的内容:一种分别获取每个匹配对的方法,无论是在变量中还是在
$1和$2每次循环运行中的一对。 -
字符串中只有三个句子不能太长。
-
我现在添加了完整的输出。
-
也许你想要一个
while循环来代替? (在标量上下文中完成匹配,而不是列表)
标签: regex perl regex-group