不要使用正则表达式解析 XML/HTML,而应使用正确的 XML/HTML 解析器。
theory :
根据编译理论,HTML 无法使用基于的正则表达式进行解析有限状态机 http://en.wikipedia.org/wiki/Finite-state_machine。由于 HTML 的层次结构,您需要使用下推自动机 http://en.wikipedia.org/wiki/Pushdown_automaton并操纵LALR http://en.wikipedia.org/wiki/LR_parser使用类似工具的语法YACC http://en.wikipedia.org/wiki/Yacc.
realLife©®™ 日常工具shell /questions/tagged/shell :
您可以使用以下其中一项:
xmllint http://xmlsoft.org/xmllint.html通常默认安装 libxml2、xpath1
xmlstarlet http://xmlstar.sourceforge.net/docs.php可以编辑、选择、转换...默认不安装,xpath1
xpath https://metacpan.org/pod/XML::XPath通过 perl 的模块 XML::XPath, xpath1 安装
xidel http://videlibri.sourceforge.net/xidel.html xpath3
撒克逊林特 https://github.com/sputnick-dev/saxon-lint我自己的项目,@Michael Kay 的 Saxon-HE Java 库 xpath3 的包装
或者您可以使用高级语言和适当的库,我认为:
python /questions/tagged/python's lxml http://lxml.de/ (from lxml import etree
)
perl /questions/tagged/perl's XML::LibXML https://metacpan.org/pod/distribution/XML-LibXML/LibXML.pod, XML::XPath https://metacpan.org/pod/XML::XPath, XML::Twig::XPath https://metacpan.org/pod/XML::Twig, HTML::TreeBuilder::XPath https://metacpan.org/pod/HTML::TreeBuilder::XPath
php /questions/tagged/php's DOMXpath https://sputnick.fr/scripts/parsing-HTML-with-DOMXpath.php.html
Check: 将正则表达式与 HTML 标签一起使用 https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags
使用示例xidel /questions/tagged/xidel:
xidel -s "$currentURL" -e '//a/extract(@href,"id=(\d+)",1)'