Является ли знак «@» действительным символом тега HTML / XML? - PullRequest
10 голосов
/ 15 августа 2011

Я делаю HTML-разбор с использованием регулярных выражений (да, я знаю, никогда не разбираю HTML с регулярными выражениями, но я просто извлекаю его, и я, к сожалению, тоже не могуиспользовать любые внешние библиотеки).Я использую регулярное выражение из книги рецептов регулярных выражений, и оно отлично работает, за исключением того, что я только что столкнулся с этой проблемой:

В строке Bob Saget <bobs@aol.com> мое регулярное выражение совпадает с адресом электронной почты как тегом.

Итак, мой вопрос: является ли знак @ допустимым символом XML или HTML tag ?(Я не спрашиваю, действительно ли это допустимо в атрибуте; я знаю, что это так). Если это не так, я смогу успешно исключить его в своем регулярном выражении.

Я не уверенгде это посмотреть.Я посмотрел здесь и думаю, что это говорит о том, что в XML знак at не разрешен в теге;однако я был бы признателен за конкретное доказательство.

1 Ответ

14 голосов
/ 15 августа 2011

После другого взгляда на XML спецификацию :

Тег состоит из:

'<' 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 и, следовательно, недопустимо в Name.

...