1

(より良いタイトルを作ることができるなら、してください)

やあ、

文字列が次の正規表現と一致することを確認する必要があります。

^[0-9a-zA-Z]{1}[0-9a-zA-Z\.\-_]*$
(Starts with a letter or number, then any number of letters, numbers, dots, dashes or underscores)

しかし、それを考えると、Guidと一致しないことを確認する必要があります。Guidに一致する正規表現は次のようになります(明らかに、これはマージされた結果で否定する必要があります)。

^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$

ここでの最後の要件は、(可能であれば)それらを単一の式にマージする必要があることです。

4

3 に答える 3

6

の先読みアサーションを使用できます。

(?!YourGuidExpression)YourOtherExpression
于 2010-06-12T17:46:38.463 に答える
3

あなたの言語がそれをサポートしている場合、これを行う最も簡単な方法は、否定的な先読みを使用することです:

^(?!([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$)[0-9a-zA-Z]{1}[0-9a-zA-Z\.\-_]*$
于 2010-06-12T17:47:22.750 に答える
0

両方を組み合わせるのではなく、両方の正規表現を使用することをお勧めします。これにより、ほとんどの場合、保守が容易になり、高速になります。このようなもの:

if (m/^[0-9a-zA-Z]{1}[0-9a-zA-Z\.\-_]*$/) {
  my $m = $&;
  if ($m =~ m/^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$/) {
    return null;
  } else {
    return $m;
  } 
} else {
  return null;
}
于 2010-06-13T01:22:42.593 に答える