【问题标题】:Regex to Match Inner find正则表达式匹配内部查找
【发布时间】:2014-03-12 02:33:38
【问题描述】:

我正在尝试使用 .NET 正则表达式匹配一些 html 列表标签 <ol>...</ol><ul>...</ul>。我可以使用

匹配其中任何一个或两个
<(ol|ul)( )?>.*</( )?\1>

但前提是没有另一个相同的列表。

例如,这将获得两个命中:

<ol>this is the first list</ol>...<ul>this is the second list</ul>;

但这只会得到一击:

<ol>this is the first list</ol>...<ul>this is the second list</ul>...<ol>this is the third list</ol>

我觉得我需要替换我表情中间的.*,但我无法弄清楚。任何帮助将不胜感激。

编辑:对不起,我想应该提到(@alliteralmind)我专门寻找&lt;ol&gt;&lt;ul&gt;标签(及其结束标签),这两种类型肯定都包含&lt;li&gt;...&lt;/li&gt;元素。

【问题讨论】:

  • 不要使用正则表达式解析html

标签: html .net regex


【解决方案1】:

要捕获 HTML 列表中的所有行,您可以使用:

<(ol|ul)\b[^>]*>(.*?)</\1>

Debuggex Demo

这需要“点匹配全部”。捕获组二包含所有行。在.* 之后需要问号才能到达 first 结束标记。

(由于某种原因,这在 Debuggex 中不起作用,但在 Perl 的 RegexBuddy 中确实有效。)

【讨论】:

  • 我添加了一个编辑来解释为什么这个解决方案在我的情况下不起作用。
  • 如果你只想要olul标签,那么就使用&lt;(ol|ul)[^&gt;]*&gt;([^&lt;]+)&lt;/\1&gt;
  • 谢谢,但如果里面有其他标签,例如&lt;li&gt;&lt;b&gt;,则不匹配
  • 谢谢!我将第一组更改为 (ol|ul),它似乎做我想做的事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多