正则表达式 - 字符串中出现超过x次的字符(在不同位置)

时间:2016-05-20 19:33:46

标签: regex perl character

我需要正则表达式来查找“@”何时出现超过10次。该字符串将包含电子邮件地址,以逗号分隔,因此@s永远不会彼此相邻。

我所拥有的是@ {10,}只有在连续10个@s时才有效。当字符串中有10+以上时,我需要它才能工作。 TIA!

2 个答案:

答案 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}/