我正在使用正则表达式进行一些HTML剥离(是的,我知道,从来没有用正则表达式解析 HTML,但我只是剥离它,我也是遗憾的是不能使用任何外部库)。我正在使用正则表达式食谱中的正则表达式,它运行得很好,除了我遇到这个问题:
在字符串Bob Saget <bobs@aol.com>
中,我的正则表达式将电子邮件作为标记进行匹配。
所以我的问题是,@
是否签署了有效的XML或HTML 标记字符? (我不是在询问它是否在属性中有效;我知道它是有效的)如果不是,我将能够在我的正则表达式中成功排除它。
我不知道在哪里查看。我看了here,我认为在XML中,标签中不允许使用at符号;但是,我希望得到一些具体的证据。
答案 0 :(得分:14)
再看一下XML Specification:
标签包含:
'<' Name (S Attribute)* S? '>'
名称包括:
NameStartChar (NameChar)*
NameStartChar包含:
":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
NameChar包含:
NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
@
符号为U+0040
因此@
符号在NameChar或NameStartChar中无效,因此在名称中无效。