正则表达式,停止“。*”匹配

时间:2017-03-12 06:45:26

标签: regex

我正在尝试制作一个简单的正则表达式,但我遇到了一些困难:

让我们想象以下文字:

<div class="thread">things</p></div><div class="thread">things</p></div>
<div class="thread">things</p></div>

我想匹配所有things。知道things几乎可以是任何东西。

所以,首先,我开始使用此正则表达式:/<div class\=\"thread\">(.*)<\/p><\/div>/并添加了/s修饰符以匹配第二行。

问题是,这个正则表达式只返回一个匹配:

things</p></div><div class="thread">things</p></div>
<div class="thread">things

因为它从第一个<div class="thread">开始,到最后一个</p></div>

结束

如何指示正则表达式在第一个.*之后停止匹配</p></div>

3 个答案:

答案 0 :(得分:2)

使用?使其“懒惰”。有关详细信息,请参阅here

 <div class\=\"thread\">(.*?)<\/p><\/div>/

答案 1 :(得分:2)

让正则表达式非贪婪:

regex: /<div class\=\"thread\">(.*?)<\/p><\/div>/

上述正则表达式中的(.*?)表示在开始<div>标记之后匹配任何内容,直到最近结束匹配标记。

您的原始正则表达式贪婪地匹配所有内容,直到最后匹配结束标记。

答案 2 :(得分:1)

您可以使用以下正则表达式 ...

(?<=class="thread">).*?(?=<\/p>)

参见 regex demo / explanation