gpt4 book ai didi

html - 如何匹配不在标签内的 HTML 文本?

转载 作者:太空狗 更新时间:2023-10-29 13:37:30 32 4
gpt4 key购买 nike

给定这样一个字符串:

<a href="http://blah.com/foo/blah">This is the foo link</a>

... 和搜索字符串如“foo”,我想突出显示 HTML 文本中所有出现的“foo”——但不在标记内。换句话说,我想得到这个:

<a href="http://blah.com/foo/blah">This is the <b>foo</b> link</a>

但是,简单的搜索和替换将不起作用,因为它会匹配 标记的 href 中的部分 URL。

因此,以问题的形式表达上述内容:如何限制正则表达式,使其只匹配 HTML 标签之外的文本?

注意:我保证有问题的 HTML 永远不会像这样的病态:

<img title="Haha! Here are some angle brackets to screw you up: ><" />

编辑: 是的,我当然知道 CPAN 中有复杂的库,甚至可以解析最令人发指的 HTML,从而减轻了对这种正则表达式的需求。在很多情况下,这就是我会使用的。但是,这不是其中一种情况,因为保持此脚本简短且没有外部依赖性很重要。我只想要一个单行正则表达式。

编辑 2: 同样,我知道 Template::Refine::Fragment 可以为我解析我所有的 HTML。如果我正在编写一个应用程序,我肯定会使用这样的解决方案。但这不是一个应用程序。它只不过是一个 shell 脚本。这是一段一次性代码。在这种情况下,作为一个可以传递的独立文件非常有值(value)。 “嘿,运行这个程序”比“嘿,安装一个 Perl 模块然后运行这个——等等,什么,你以前从未使用过 CPAN?好的,运行 perl -MCPAN -e shell(最好是作为根)然后它会问你一堆问题,但你真的不需要回答它们。不,别害怕,这不会破坏任何东西。看,你不需要仔细回答每个问题 - 只需一遍又一遍地按回车键。不,我保证,它不会破坏任何东西。”

现在,大量用户想知道为什么他们一直使用的简单脚本不再那么简单,而所有更改只是使搜索词变为粗体。

因此,虽然 Template::Refine::Fragment 可能是其他人的 HTML 解析问题的答案,但它不是这个问题的答案。我只想要一个正则表达式,它适用于实际要求脚本解析的非常有限的 HTML 子集。

最佳答案

如果您绝对可以保证 HTML 中除了用于打开和关闭标签的尖括号之外没有尖括号,那么这应该可行:

s%(>|\G)([^<]*?)($key)%$1$2<b>$3</b>%g

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com