我正在尝试检测字符串是 XML/HTML 格式,还是其他格式,如 CSV 或 JSON,可能包含 HTML 作为数据,或者只是可能包含随机 < 或 > 字符的通用文本。我并不是要验证完整的 XML 或 HTML 文档——我正在测试的字符串可能只是 XML/HTML 的片段,或者它们可能是其他东西的片段。因此,我的标准是字符串必须包含至少一个格式正确的 XML 标记,并且该标记必须从字符串的开头开始,除非有任何空格。(此时,您可能已经猜到我正在尝试自动检测文本内容的 mime 类型,然后再将其发送回浏览器。顺便说一句,我在 PHP 中。)
我有一个将检测 XML/HTML 标记的正则表达式:
~<[a-z]+.*?(>.*?</[a-z]+>|/>)~i
我有一个正则表达式,它会告诉我标签是否开始字符串,忽略空格:
~^\s*<~
问题是,我无法弄清楚如何将这两者组合成一个正则表达式。困难似乎源于正则表达式的“贪婪”方面,特别是如果主题包含嵌套标签。帮助?