0

如何匹配在两个非数字之间有一个或多个数字的数组的字符串,并且字符串以数字结尾?假设我想打印出匹配的字符串。我该怎么做?

这是我到目前为止所拥有的

my @array = ("OST3GIC2", "GRE1", "foo23eoo4","MAX13", "foo9fsa2");
foreach @array{
if !(grep /^+\D(+\d)+\D\d$/) {
print $_."\n";
}

期望的输出

GRE1
MAX13

谢谢

4

3 回答 3

4

你可以寻找:

/\D\d+\D.*\d$/
  • \D非数字
  • \d+任意位数
  • \D非数字
  • .*任何事物
  • \d一个数字
  • $最后是字符串的结尾
于 2013-02-23T10:45:38.763 回答
2

如果你想要直接不匹配,你可以使用

^\D+\d+$

如果你想要匹配,然后过滤掉,你可以使用

^\D*\d+\D+\d+$
于 2013-02-23T11:00:18.023 回答
2
my @array = ("OST3GIC2", "GRE1", "foo23eoo4","MAX13", "foo9fsa2");

print(join("\n", grep { ! /^\D+\d+\D+\d+$/ } @array) . "\n");

意义

  • !反转正则表达式结果
  • ^\D\d+\D+\d+$表示以任何非数字开头,然后是任何数字,然后是任何非数字,然后以数字结尾

(其中任何表示至少一个)

于 2013-02-23T12:01:43.553 回答