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 匹配 reg-ex 看起来像这样(显然,这需要在合并结果中取反):

^([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 回答