如何使用 Perl 验证变量值是否包含字符并以数字结尾



我正在尝试检查变量是否包含字符"C"并以数字结尾,在次要版本中。我有:

my $str1 = "1.0.99.10C9";
my $str2 = "1.0.99.10C10";
my $str3 = "1.0.999.101C9";
my $str4 = "1.0.995.511";
my $str5 = "1.0.995.AC";

如果变量在第 4 位有 C 并以数字结尾,我想放一个正则表达式来打印一些消息。 因此,对于 str1,str2,str3 ->,它应该打印"匹配"。我正在尝试在正则表达式下面,但它们都不起作用,你能帮忙纠正它吗?

my $str1 = "1.0.99.10C9";
if ( $str1 =~ /D+d+$/ ) {
print "Candy match1n";
}
if ( $str1 =~ /D+Cd+$/ ) {
print "Candy match2n";
}
if ($str1 =~ /D+"C"+d+$/) {
print "candy match3";
}
if ($str1 =~ /D+[Cc]+d+$/) {
print "candy match4";
}
if ($str1 =~ /D+\Cd+$/) {
print "candy match5";
}
if ($str1 =~ /C[^.]*d$/)
  • C与字母C匹配。
  • [^.]*匹配未.的任意数量的字符。这可确保匹配不会跨越版本号的多个字段,它只会匹配最后一个字段。
  • d匹配一个数字。
  • $匹配字符串的末尾。所以数字必须在最后。

我发现使用 https://www.regextester.com/109925 来测试和分析我的正则表达式字符串真的很有帮助。

让我知道这个正则表达式是否适合您:

((.*.){3}(.*Cd{1}))

按照您的格式,此正则表达式假设 3 个.,中间有字符,然后在第三个.之后,它会检查字符串的其余部分是否包含 C。

编辑:

如果要确保字符串以数字结尾,并且不想使用它来检查包含公式的较长字符串,请使用:

^((.*.){3}(.*Cd{1}))$

让我们看看正则表达式应该是什么样子:

start{digit}.{digit}.{2-3 digits}.{2-3 digits}C{1-2 digits}end

非常
  • 非常严格的qr/^1.0.9{2,3}.101?Cd+z/- 必须从1.0.99[9]?.开始
  • 非常严格的qr/^1..d{2,3}.d{2,3}Cd{1,2}z/- 必须从1.0.开始
  • 严格的qr/^d.d.d{2,3}.d{2,3}Cd{1,2}z/
  • 轻松qr/^d.d.d+.d+Cd+z/
  • 非常轻松的qr/.d+Cd+z/
use strict;
use warnings;
use feature 'say';
my @data = qw/1.0.99.10C9 1.0.99.10C10 1.0.999.101C9 1.0.995.511 1.0.995.AC/;
#my $re   = qr/^d.d.d+.d+Cd+z/;
my $re   = qr/^d.d.d{2,3}.d{2,3}Cd+z/;
say '--- Input Data ---';
say for @data;
say '--- Matching -----';
for( @data ) {
say 'match ' . $_ if /$re/;
}

输出

--- Input Data ---
1.0.99.10C9
1.0.99.10C10
1.0.999.101C9
1.0.995.511
1.0.995.AC
--- Matching -----
match 1.0.99.10C9
match 1.0.99.10C10
match 1.0.999.101C9

最新更新