我可以使用正则表达式安全地替换 HTML 中的“<ul>”标签吗?
Can I safely replace "<ul>" tags within HTML using regexes?
我正在尝试解决 ,其中用户粘贴我们必须处理的无效 HTML,格式为 <ol><ul><li>item</li></ul></ol>
。我们目前正在使用 lxml
进行解析。在合法的 HTML 中,<ol>
不能有 <ul>
的(直接)子代(它必须在 <li>
中)所以 lxml
关闭 ol
标签过早尝试“修复”HTML,生成 <div><ol/><ul><li>item</li></ul>
.
用户粘贴的文本也可能无效 XML(例如,裸 <br>
标签),因此我们不能将其解析为 XML.
因此,我们不能将其解析为 HTML 或 XML,因为它可能无效。
为了使无效 HTML 的某些(常见)情况变为有效 HTML,我们能否将所有 <ul>
标签替换为 <ol>
使用正则表达式的标签?
如果我使用 lxml 来解析 <ol><ol><li>item</li></ol></ol>
,输出看起来不错(不会很快关闭标签)。
但是,我不想破坏实际用户键入的文本,我想知道是否存在我没有想到的极端情况(例如 [=25 中的“<ul>
” =] 标签或其他一些实际上不是标签的疯狂东西,尽管我已经测试了这种特殊情况)。
是的,它会将未编号列表更改为编号列表。我没意见。
是的,我已阅读this fun regex answer。
一般来说,不能保证 'non-edge case' 使用 HTML 和正则表达式进行转换。 HTML 比 XML 更具有直接文本替换看起来像标签的问题的规则。
以下文本 validates as HTML using w3c.org validation checker 没有任何警告。
<!DOCTYPE html>
<html lang="en">
<head>
<title><!--<ul>--></title>
<style lang="css">s {content: "<ul>";}</style>
<script>"<ul>"</script>
</head>
<body data-ul="<ul>"></body>
</html>
除此之外,使用一些正则表达式试探法可能会解决手头的问题 - 至少在合理的范围内。不尝试应用任何验证或 DOM/tree 构建的流式 HTML 令牌解析器也可能对初始替换阶段有用。
我正在尝试解决 <ol><ul><li>item</li></ul></ol>
。我们目前正在使用 lxml
进行解析。在合法的 HTML 中,<ol>
不能有 <ul>
的(直接)子代(它必须在 <li>
中)所以 lxml
关闭 ol
标签过早尝试“修复”HTML,生成 <div><ol/><ul><li>item</li></ul>
.
用户粘贴的文本也可能无效 XML(例如,裸 <br>
标签),因此我们不能将其解析为 XML.
因此,我们不能将其解析为 HTML 或 XML,因为它可能无效。
为了使无效 HTML 的某些(常见)情况变为有效 HTML,我们能否将所有 <ul>
标签替换为 <ol>
使用正则表达式的标签?
如果我使用 lxml 来解析 <ol><ol><li>item</li></ol></ol>
,输出看起来不错(不会很快关闭标签)。
但是,我不想破坏实际用户键入的文本,我想知道是否存在我没有想到的极端情况(例如 [=25 中的“<ul>
” =] 标签或其他一些实际上不是标签的疯狂东西,尽管我已经测试了这种特殊情况)。
是的,它会将未编号列表更改为编号列表。我没意见。
是的,我已阅读this fun regex answer。
一般来说,不能保证 'non-edge case' 使用 HTML 和正则表达式进行转换。 HTML 比 XML 更具有直接文本替换看起来像标签的问题的规则。
以下文本 validates as HTML using w3c.org validation checker 没有任何警告。
<!DOCTYPE html>
<html lang="en">
<head>
<title><!--<ul>--></title>
<style lang="css">s {content: "<ul>";}</style>
<script>"<ul>"</script>
</head>
<body data-ul="<ul>"></body>
</html>
除此之外,使用一些正则表达式试探法可能会解决手头的问题 - 至少在合理的范围内。不尝试应用任何验证或 DOM/tree 构建的流式 HTML 令牌解析器也可能对初始替换阶段有用。