提问人:Austin Becker 提问时间:7/12/2022 最后编辑:Andy LesterAustin Becker 更新时间:7/12/2022 访问量:93
正则表达式,用于在 HTML 标记的重复模式中创建不同的捕获组
Regular expression to make distinct capture groups within a repeating pattern of HTML tags
问:
我想在每次出现这些 HTML 标签时制作一个带有文本的捕获组。<li>
</li>
例如:
<li>packaged in a classy box</li> <li>measures 0.9x1.15" (2.3x2.8cm)</li> <li> <em>925 silver</em> and <em>14k white gold</em> arrive with an 20" <strong> silver chain </strong> </li>
所以我需要的输出是:
捕获组 1: 捕获组 2: 捕获组 3:
packaged in a classy box
measures 0.9x1.15" (2.3x2.8cm)
<em>925 silver</em> and <em>14k white gold</em> arrive with an 20" <strong> silver chain </strong>
我试着环顾四周,但它们与第一个和最后一个之间的所有内容都匹配。<li>
<\li>
答:
只需使用表示“匹配任何字符的最小数量”的模式即可。.*?
例如,假设您的 HTML 输入保存在文件 input.html 中。下面是一个使用 Perl 正则表达式完成的 Perl 程序:
cat input.html | perl -pe 's%<li>(.*?)</li>.*?<li>(.*?)</li>.*?<li>(.*?)</li>%capture group 1: \1\ncapture group 2: \2\ncapture group 3: \3\n%'
输出为:
capture group 1: packaged in a classy box
capture group 2: measures 0.9x1.15" (2.3x2.8cm)
capture group 3: <em>925 silver</em> and <em>14k white gold</em> arrive with an 20" <strong> silver chain </strong>
请注意,使用一些正则表达式来解析 HTML 并不是正确执行操作的最佳方法。更好的方法是使用 XSLT 处理器(如 xsltproc)将 XSLT 样式表应用于输入,或者使用 DOM 分析器。DOM 解析器可能是最好的工具,因为它可以处理一些格式错误的 HTML 输入。
评论
下一个:捕捉样式标签内部内容
评论
<li>foo</li> <li><ul><li>A</li><li>B</li></ul></li>
<li>.*?</li>
foo
<ul><li>A
<ul><li>A</li><li>B</li></ul>