您很可能需要使用 Regex 来查找所需的字符串段,sed
并将awk
Regex 作为一个选项,尽管可能需要切换才能这样做。我建议将标签作为整体查找,否则您可能最终会在结束标签和开始标签 ( ) 之间获得代码</span>stuff here<p>
,而这可能是您不想要的。
因此,您的正则表达式最基本的可能看起来像这样(未经测试,您可能需要对其进行调整):
/\<[a-zA-z]\>/ /* Find the opening tag. */
/\<[/a-zA-z]\>/ /* Find the closing tag, note the presence of the "/" inside the square brackets.
*/
根据您的需要,您可以创建要查找的标签列表,特别是为您提供以下内容:
tags="div|p|article|section" /* Your list of tags, pipe-delimited for OR logic */
/\<$tags[:print:]\>/ /* The regex, looking for something like <div[anything]> */
您可以通过正则表达式为开始标签更进一步,将基本标签存储在变量中,然后找到匹配的结束标签。这可能需要更多的工作才能正常工作,但它确实具有更健壮的优点,并且自然地避免了在错误的结束标记处停止的陷阱(即 - 在</a>
应该停止的时候停止</p>
)。
一些注意事项 - 这可能会因为一些单字符标签而变得有点麻烦。如果你写得不够聪明,你的程序可能会混淆和之类的东西<a>
,<article>
所以要确保你的代码足够健壮来解决这个问题。
另外,不要忘记<input>
s 用于生成大多数不同的表单输入,因此如果您关心它们是什么,请确保在type
遇到<input>
.
最后,你不一定要假设一个标签会有一个结束标签。有些标签没有一个(<br/>
/ <br>
,<hr/>
/ <hr>
),HTML规范并不总是需要它们(<li>
并且<p>
不需要结束标签,只要下一个开始标签是另一个<li>
or <p>
,或者后跟父母的结束标签) . 你也不能假设你得到的 HTML 是有效的。因此,请务必考虑这些情况,以免您的应用程序崩溃和烧毁。