1

我有这段文字:

<span id="3">

HELLO THERE
<span id="5">
Other stuff
<span id="6">
Other Stuff
<span id="7">
Other sutff

我只需要抓住文本<span...>之后的元素。HELLO THERE所以在上面的例子中,除了 id=3 的 span 之外的所有 span。

所以我尝试(<span.+?>)+了抓住所有跨度。接下来,我尝试HELLO THERE.+?(<span.+?>)+了,但这只抓住了第一个相关的。所以我的问题是,在这里使用的正确正则表达式是什么?

4

2 回答 2

2

正则表达式 1

在这里,我们可以使用几个表达式来获得所需的<span>开始标签。例如,我们可以简单地使用:

\s(<.+)

左边有一个空间边界和一个可以做到这一点的捕获组。

在此处输入图像描述

演示


正则表达式 2

另一种更昂贵且复杂性更高的替代方案是:

([\s\S].*?)(<.+>)

在此处输入图像描述

演示

正则表达式 3

然后,我们可以使用这个表达式来降低复杂度并提高性能:

([\s\S].*?)(<.+>)*

在此处输入图像描述

演示

正则表达式电路

在这里,我们还可以在jex.im中可视化我们的表达式:

在此处输入图像描述

于 2019-05-20T00:24:52.847 回答
0

此正则表达式会将 Hello There 之后的所有标签捕获到匹配组中:

HELLO THERE(?:(?:.*?)(<span[^>]+>))+
  • HELLO THERE- 匹配
    非捕获组内的开头:
  • (?:.*?)- 可选地匹配任何文本,直到你找到
  • (<span[^>]+>)- span 标签 - 这一个将被捕获
  • +- 重复前两个步骤,直到找不到其他跨度标签

您还需要将匹配选项设置为点匹配新行。

于 2012-04-28T12:53:26.497 回答