【发布时间】:2013-09-13 21:23:50
【问题描述】:
我正在尝试检测字符串是 XML/HTML 格式,还是其他格式,如 CSV 或 JSON,可能包含 HTML 作为数据,或者只是可能包含随机 字符的通用文本。我不是要验证完整的 XML 或 HTML 文档——我正在测试的字符串可能只是 XML/HTML 的 sn-ps,或者它们可能是其他东西的 sn-ps。因此,我的标准是字符串必须包含至少一个格式正确的 XML 标记,并且该标记必须从字符串的开头开始,除非有任何空格。 (此时,您可能已经猜到我正在尝试自动检测文本内容的 mime 类型,然后再将其发送回浏览器。顺便说一句,我在 PHP 中。)
我有一个可以检测 XML/HTML 标记的正则表达式:
~<[a-z]+.*?(>.*?</[a-z]+>|/>)~i
我有一个正则表达式,它会告诉我标签是否开始字符串,忽略空格:
~^\s*<~
问题是,我无法弄清楚如何将这两者组合成一个正则表达式。困难似乎源于正则表达式的“贪婪”方面,特别是如果主题包含嵌套标签。帮忙?
【问题讨论】:
-
试试:
/<([^>]+)>.+?<\/\1>/ -
~^(\s+)?<[a-z]+.*?(>.*?</[a-z]+>|/>)~i? -
顺便说一句,您还应该考虑
<?xml version="1.0"?><xmltag attr="1" />是有效的 XML。 -
@elclanrs 是否解决了前面的空格?
-
@dev-null-dweller 是的。我试过了,但如果主题包含嵌套的 XML 标记,它就不起作用。