2012-04-28 69 views
1

我有这样的文字:正则表达式重复组

<span id="3"> 

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

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

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

+4

有关于类似问题的[非常好的帖子](http://stackoverflow.com/a/1732454/335858)。 – dasblinkenlight 2012-04-28 03:02:44

回答

0

此正则表达式将捕获后你好所有标记为匹配组:

HELLO THERE(?:(?:.*?)(<span[^>]+>))+ 
  • HELLO THERE - 匹配开始
    非捕获组内:
  • (?:.*?) - 可选匹配任何文本直到找到
  • (<span[^>]+>) - 跨度标签 - 这个将被捕获
  • + - 重复前面的2个步骤,直到没有其他span标签可以发现

你还需要设置你的匹配选项,点匹配新的生产线。

+1

你测试过这个正则表达式吗?我想你可能会感到惊讶。 – Ziggy 2013-11-20 15:33:04

+1

它只匹配最后一个跨度(id = 7) – Tsayper 2015-05-19 10:52:09