我的正则表达式有问题吗?

cho*_*bo2 3 regex xml

我制作了一个XML Schema,我有它.

<xs:element name="Email">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
Run Code Online (Sandbox Code Playgroud)

我的一个XML文档中的一些电子邮件失败,我收到此错误

电子邮件'元素无效 - 值'Some_Name@hotmail.com'根据其数据类型'String'无效 - 模式约束失败.LineNumber:15404 LinePostion:32

所以只要查看通过的所有电子邮件和失败的电子邮件,我注意到所有失败的电子邮件都有"_(下划线)".所以我不确定这是否是原因.

编辑

所以我改变了我的正则表达式

 <xs:pattern value="[\w_]+([-+.'][\w_]+)*@[\w_]+([-.][\w_]+)*\.[\w_]+([-.][\w_]+)*"/>
Run Code Online (Sandbox Code Playgroud)

它现在有效,但不明白为什么\w不捕获它.

myk*_*hal 6

关于数据类型W3C建议书定义\w为:

[#X0000-#x10FFFF]-[\p{P}\p{Z}\p{C}](除" 标点符号 ","分隔符"和"其他"字符集外的所有字符)*

Unicode中下划线字符定义是"LOW LINE"(U + 005F),类别:标点符号,连接符[Pc]

因此XML Schema根据Unicode定义更多地处理字符类.

但是,对于电子邮件的正则表达式,你shold使用严格的ASCII,喜欢[0-9A-Za-z_-]的这一翻译\w(我敢打赌,与nonlatin字符的电子邮件地址是无效的:)),但更好的是要找到一个成熟的正则表达式的语法,或可考虑RFC,什么是正确的Ë邮件格式