管周围有一百万个备忘单,它们列举了不同版本和HTML规范所指定的字符实体。我不想相信他们中的任何一个,所以我想我会把它扔到这里,看看是否有人发表了更权威的答案。
因此,我们假设我想使用正则表达式匹配任何和所有字符引用和实体。我从/&(?:#(?:x[0-9a-f]+|[0-9]+)|[a-z]{???,???});/i
开始。但是???
会怎样呢?我可以想到两个字符长的实体,比如lt
和gt
,但HTML的任何规范中是否有任何单字母实体?同样,最长的实体是什么?最后,那些 是用于在HTML中表达文字字符的唯一三种语法,只是直接输入它们,不是吗?
干杯!
答案 0 :(得分:4)
HTML5中最长的是∳
,并且没有单字母名称。
但请注意,命名实体引用无法正常工作。一些命名的字符引用不以分号结尾,因此正则表达式不会削减芥末。
答案 1 :(得分:3)
HTML5规范现在明确地描述了自90年代中期以来用于纠错的浏览器:如果它与已知字符引用不匹配,则逐字显示该事物。因此,如果您希望正则表达式像浏览器一样工作,则必须复制浏览器行为。
这意味着,您必须测试已知引用的完整列表,例如Jukka提到的引用。您可以通过巧妙地使用括号来缩写该术语,
[aeiou]uml
但是您需要将相同的知识烘焙到浏览器所具有的正则表达式中,以获得相同的结果。
编辑:顺便说一句,命名实体也可能包含数字,例如&ensp13;
。
答案 2 :(得分:2)
根据SGML传统,实体名称曾经有2到7个字母,HTML 4.01规范(和XHTML规范)中仍然如此。但是HTML5草稿在那里添加了大量实体,称为named character references,其中一些实体相当长,如EmptyVerySmallSquare
。因此,最好避免任何固定的上限 - 或大于1的下限。