0

2 つの非数字の間に 1 つ以上の数字があり、文字列が数字で終わる配列の文字列を一致させるにはどうすればよいですか? 一致しなかった文字列を出力したいとしましょう。どうすればいいですか?

これが私がこれまでに持っているものです

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+$数字以外で始まり、次に数字、次に数字以外、そして数字で終わることを意味します

( anyは、ここで少なくとも 1 つを意味します)

于 2013-02-23T12:01:43.553 に答える