如何使用Perl查找与正则表达式匹配的所有字符串实例?
发布时间:2020-12-15 21:42:42 所属栏目:大数据 来源:网络整理
导读:如何使用Perl查找并打印与 regexp匹配的所有字符串? 以下仅查找第一场比赛. $text="?Adsfsadfgaasdf.?Bafadfdsaadsfadsf.xcxvfdgfdg";if($text =~ m/?([^.]+.)/) { print "$1n";} EDIT1:/ g不起作用 #!/usr/bin/env perl$text="?Adsfsadfgaasdf.?Bafa
如何使用Perl查找并打印与
regexp匹配的所有字符串?
以下仅查找第一场比赛. $text="?Adsfsadfgaasdf. ?Bafadfdsaadsfadsf. xcxvfdgfdg"; if($text =~ m/?([^.]+.)/) { print "$1n"; } EDIT1:/ g不起作用 #!/usr/bin/env perl $text="?Adsfsadfgaasdf. ?Bafadfdsaadsfadsf. xcxvfdgfdg"; if($text =~ m/?([^.]+.)/g) { print "$1n"; } $./test.pl ?Adsfsadfgaasdf. 解决方法
问题是/ g修饰符不会将捕获组用于多个匹配.您需要在标量上下文中迭代匹配,或者在列表上下文中捕获返回的列表.例如:
use v5.10; # required for say() $text="?Adsfsadfgaasdf. ?Bafadfdsaadsfadsf. xcxvfdgfdg"; while ($text =~ /?([^.]+.)/g) { # scalar context say $1; } for ($text =~ /?[^.]+./g) { # list context say; # match is held in $_ } 注意在第二种情况下,我跳过了parens,因为在列表上下文中,如果没有parens则返回整个匹配.您可以添加parens来选择字符串的一部分. 您的版本使用if,使用标量上下文,它保存最近匹配的位置,但不会继续.一种看待发生的事情的方法是: if($text =~ m/?([^.]+.)/g) { print "$1n"; } say "Rest of string: ",substr $text,pos; pos给出了最近一场比赛的位置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |