我需要正则表达式来查找“@”何时出现超过10次。该字符串将包含电子邮件地址,以逗号分隔,因此@s永远不会彼此相邻。
我所拥有的是@ {10,}只有在连续10个@s时才有效。当字符串中有10+以上时,我需要它才能工作。 TIA!
答案 0 :(得分:2)
要回答您的问题,您可以使用"土星"来计算正则表达式中的匹配数量。操作
use warnings;
use strict;
my $str = 'a@b.com, m@b.ca, x@c@@@d@xxxxx@@@, @';
my $count =()= $str =~ /@/g;
if ($count > 10){
...
}
这是一个没有中间$count
变量的示例:
if ((() = $str =~ /@/g) > 10){
那就是说,我和其他人一起评论说正则表达式可能不是最好的方法。
答案 1 :(得分:1)
以下模式匹配超过10 @
的字符串:
@.*@.*@.*@.*@.*@.*@.*@.*@.*@.*@
经过优化(.
⇒[^@]
),删除了冗余并嵌入到匹配运算符中后,它变为以下内容:
/\@(?:[^\@]*\@){10}/
有一次,你说你想找到“10+”而不是“10以上”。为此,你可以使用。
/\@(?:[^\@]*\@){9}/