POSIX REGEX与PCRE

问题描述

我有这个表达式来检查有效的电子邮件地址。 这是从https://www.regexpal.com/19发来的,它工作正常。

^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$

测试字符串:[email protected]

使用POSIX对此进行测试将返回错误。我想知道哪一部分对POSIX无效。

解决方法

POSIX指定两种类型的正则表达式,

  1. 基本正则表达式,BRE
  2. 扩展正则表达式,ERE

我们需要知道您要使用哪个。

与PCRE最不兼容的地方是BRE中缺少+{n,m}(?...),而ERE中缺少(?...)。有关详细信息,请研究Opengroup's BRE and ERE Specification