如何匹配在两个非数字之间有一个或多个数字的数组的字符串,并且字符串以数字结尾?假设我想打印出不匹配的字符串。我该怎么做?
这是我到目前为止所拥有的
my @array = ("OST3GIC2", "GRE1", "foo23eoo4","MAX13", "foo9fsa2");
foreach @array{
if !(grep /^+\D(+\d)+\D\d$/) {
print $_."\n";
}
期望的输出
GRE1
MAX13
谢谢
你可以寻找:
/\D\d+\D.*\d$/
\D
非数字\d+
任意位数\D
非数字.*
任何事物\d
一个数字$
最后是字符串的结尾如果你想要直接不匹配,你可以使用
^\D+\d+$
如果你想要匹配,然后过滤掉,你可以使用
^\D*\d+\D+\d+$
my @array = ("OST3GIC2", "GRE1", "foo23eoo4","MAX13", "foo9fsa2");
print(join("\n", grep { ! /^\D+\d+\D+\d+$/ } @array) . "\n");
意义
!
反转正则表达式结果^\D\d+\D+\d+$
表示以任何非数字开头,然后是任何数字,然后是任何非数字,然后以数字结尾(其中任何表示至少一个)