Complex(?) regex:是表达式,但不是另一个

发布于 2024-09-05 22:46:08 字数 453 浏览 5 评论 0原文

(如果你能做出更好的标题,请这样做)

嗨,

我需要确保一个字符串与以下正则表达式匹配:

^[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}$

这里的最后一个要求是它们必须(如果可能的话)合并到单个表达式中。

(If you can make a better title, please do)

Hi,

I need to make sure a string matches the following regex:

^[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)

But given that, I need to make sure it doesn't match a Guid, my Guid matching reg-ex looks like this (obviously, this needs to be negated in the merged result):

^([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}$

The last requirement here is that they must (if it's possible) be merged into a single expression.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

两人的回忆 2024-09-12 22:46:08

您可以只使用否定先行断言

(?!YourGuidExpression)YourOtherExpression

You can just use a negative lookahead assertion.

(?!YourGuidExpression)YourOtherExpression
画▽骨i 2024-09-12 22:46:08

如果您的语言支持,最简单的方法是使用 否定前瞻

^(?!([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\.\-_]*$

The simplest way to do this, if your language supports it, is to use a negative lookahead:

^(?!([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\.\-_]*$
南冥有猫 2024-09-12 22:46:08

我建议使用这两个正则表达式而不是组合它们。在大多数情况下,这将更容易维护并且更快。像这样的东西:

if (m/^[0-9a-zA-Z]{1}[0-9a-zA-Z\.\-_]*$/) {
  my $m = 
amp;;
  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;
}

I would suggest using both regular expressions rather than combining them. This will be easier to maintain as well as faster in most cases. Something like this:

if (m/^[0-9a-zA-Z]{1}[0-9a-zA-Z\.\-_]*$/) {
  my $m = 
amp;;
  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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文