Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用Perl查找与正则表达式匹配的所有字符串实例?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如何使用Perl查找并打印与 regexp匹配的所有字符串?

以下仅查找第一场比赛.

$text="?Adsfsadfgaasdf.
?Bafadfdsaadsfadsf.
xcxvfdgfdg";

if($text =~ m/\\?([^\.]+\.)/) {
    print "$1\n";
}

EDIT1:/ g不起作用

#!/usr/bin/env perl

$text="?Adsfsadfgaasdf.
?Bafadfdsaadsfadsf.
xcxvfdgfdg";

if($text =~ m/\\?([^\.]+\.)/g) {
    print "$1\n";
}

$./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 "$1\n";
}
say "Rest of String: ",substr $text,pos;

pos给出了最近一场比赛的位置.

大佬总结

以上是大佬教程为你收集整理的如何使用Perl查找与正则表达式匹配的所有字符串实例?全部内容,希望文章能够帮你解决如何使用Perl查找与正则表达式匹配的所有字符串实例?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。