我正在尝试制作一个简单的正则表达式,但我遇到了一些困难:
让我们想象以下文字:
<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>
?
答案 0 :(得分:2)
使用?
使其“懒惰”。有关详细信息,请参阅here
<div class\=\"thread\">(.*?)<\/p><\/div>/
答案 1 :(得分:2)
让正则表达式非贪婪:
regex: /<div class\=\"thread\">(.*?)<\/p><\/div>/
上述正则表达式中的(.*?)
表示在开始<div>
标记之后匹配任何内容,直到最近结束匹配标记。
您的原始正则表达式贪婪地匹配所有内容,直到最后匹配结束标记。
答案 2 :(得分:1)