【问题标题】:[A-Z]{2,4} not limiting to between 2 & 4 characters[A-Z]{2,4} 不限于 2 到 4 个字符
【发布时间】:2010-12-27 15:46:02
【问题描述】:
PCRE: /\A[A-Z0-9_\.%\+\-]+@(?:[A-Z0-9\-]+\.)+(?:[a-z]{2,4}|museum|travel)\z/i 
POSIX: /^[A-Z0-9_\.%\+\-]+@(?:[A-Z0-9\-]+\.)+(?:[A-Z]{2,4}|museum|travel)$/i

这个正则表达式在所有方面都符合我的需要,除了它允许电子邮件,例如 jim@f.com。它说这些是匹配的。如果我没记错的话,[A-Z] 后面的 {2,4} 不是意味着它必须在 2 到 4 个字符之间吗?会不会是争吵、博物馆和旅行的问题?我已经验证了这些在我的应用程序中是允许的,还有一些regex testers. 另外,我对我是否正确地执行了 PCRE 和 POSIX 感到模糊。我担心他们可能都只是 PCRE 而我很可笑。 AFAIK,JavaScript 是 POSIX,Ruby 是 PCRE。因此,如果我没有做对,请让我轻松,学习正则表达式是一个漫长而漫长的夜晚,进进出出,我试图看起来很糟糕。 :)

【问题讨论】:

  • 你的意思是我为什么要加粗那个部分?如果是这样,我希望来过的其他人可能会回答另一个问题。它的措辞并不是真正的问题,但我对更改任何实际措辞持怀疑态度,因为担心它会回滚。所以我只是加粗了那个模糊的部分,哈。不过,也许您可​​以提供帮助,因为我的 google-fu 现在无法正常工作。我是否正确假设 ruby​​ 的 RegEx 库是 PCRE 而 JavaScript 是 POSIX?这也是为什么我没有标记他的答案,希望他能回来,因为我无法给他发信息。我一定会备注的
  • 不抱歉-我的意思是有人将您的问题标记为-1,但我认为这是一个完全合理的问题,所以我给了您+1,并留下了评论:)

标签: javascript ruby regex posix pcre


【解决方案1】:

确实如此,但它仅适用于顶级域名(您的示例中的“com”)。

【讨论】:

  • 顺便说一句,我对 PCRE = Ruby 和 POSIX = Javascript 的看法是否正确?
  • 没有。 Ruby 没有 Perl 正则表达式,它有 Ruby 正则表达式。更准确地说:Ruby 1.8 有 Ruby 1.8 Regexps,Ruby 1.9 有 Ruby 1.9 Regexps,两者有很大不同。 (Ruby 1.9 更强大。)Ruby 1.8 的正则表达式是一个完全独立的实现,Ruby 1.9 是基于 Oniguruma Regexp 引擎的一个经过大量修改的分支。 Ruby 1.8 和 Oniguruma 都不是基于任何东西,当然它们各自的作者都知道 Friedl 书(掌握正则表达式)、PCRE、Perl、POSIX BRE 和 ERE 等等。
  • 啊。非常感谢 Jörg,我知道 PCRE 是 Perl RegExps,但我认为它是 POSIX 之类的标准。不过我不知道那本书,你读过吗?我才真正开始深入了解 RegExps 的作用。假期项目。 :) 想知道我是否需要自己去拿那本书?
  • 弗里德尔的书非常好。如果您想深入了解正则表达式的具体细节,这本书适合您。如需更实用的方法,请查看 regular-expressions.info 或 Jan Goyvaerts/Steve Levithan 的“Regular Expressions Cookbook”。
  • Javascript 正则表达式基于 Perl,而不是 POSIX。不知道是不是和PCRE一模一样,但至少差不多吧。
【解决方案2】:
【解决方案3】:

POSIX 不支持非捕获组(?:group),因此您的正则表达式都不是 POSIX。 JavaScript 不使用 POSIX。 JavaScript 正则表达式是 Perl 风格的,但它不具备所有功能。详情请查看我网站上的regex flavor comparison

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多