4

Perl 正则表达式查找任何 5 的倍数的数字。

我尝试使用=~ /[5]+/,但它只找到包含 5 的数字,但不是 5 的倍数。

并且还要找到长度是 5 的倍数的字符串。

4

5 回答 5

7

5 的倍数以 5 或 0 结尾。

尝试使用/^-?\d*[05]$/,这意味着:

  • ^字符串的开头(saflknfvs34535 不起作用)。
  • -?是否为减号(如果您只想要正数,请不要输入)。
  • \d*数字,任何数字。
  • [05]0 或 5。
  • $字符串结尾(324655sefgsfgsfg 不会工作)。
于 2013-05-15T05:54:15.140 回答
6

对于整数,

($_ % 5) == 0

或者

!($_ % 5)
于 2013-05-15T05:54:33.107 回答
4

这些数字将以0or结尾5,因此类似于m/^\d*[05]$/

于 2013-05-15T05:51:47.913 回答
2

我会回答你的第二个问题:还要找到长度为 5 的倍数的字符串。

这比数字部分(已回答)更适合正则表达式,只需将 5 个字符分组并匹配它们的倍数

^(?:.{5})*$

在 Regexr 上查看

^$匹配字符串的开头和结尾。

.{5}匹配 5 个字符(不使用s修饰符时的换行符除外)

(?:.{5})*重复组的内部 0 次或更多次 ==> 这也将匹配空字符串!如果您不想要这个并且仅从长度至少为 5 的字符串开始,请使用+量词表示 1 或更多:^(?:.{5})+$

于 2013-05-15T06:37:24.387 回答
1

只是为了好玩,这里有一个适用于任何除数的更通用的解决方案:

use 5.010;
"150" =~ /^(\d+)(?(?{ $^N % 5 == 0 })|(*FAIL))$/;
于 2013-05-15T07:20:26.007 回答