查找所有字符,直到找到第一次出现的字符串,然后继续使用preg_match_all获取其余字符

时间:2011-09-24 14:32:46

标签: php regex

$HTML = '

<div class="tsts">CONTENT GOES HERE 1ENDENDENDENDEND<div class="tsts">CONTENT GOES HERE 2ENDENDENDENDEND <div class="tsts">CONTENT GOES HERE 3ENDENDENDENDEND
<div class="tsts">CONTENT GOES HERE 4ENDENDENDENDEND

';

preg_match_all('%<div class="tsts">([\S\s]+)ENDENDENDENDEND%',$HTML,$matches);

我希望在比赛中找到“内容在这里1”,“内容在这里2”,“内容在这里3”,“内容在这里4”

顺便说一下我必须使用\ s \ S,因为我需要匹配所有类型的字符,包括特殊字符,新行,制表符,但我希望它在找到ENDENDENDENDEND时停止并获得其他结果

我该怎么做?因为它只停留在ENDENDENDENDEND的最后一次出现,我希望它停在它找到的第一个。所以它可以匹配其余部分。

我该怎么做?我尝试了很多,没有什么= X. 非常感谢提前。

2 个答案:

答案 0 :(得分:0)

不,您不必使用\s\S+量词可能是这里的第二个问题。

如果你没有忘记.*?标志,那么正常的/s会这样做 在您的情况下,[^<>]*?可能会更好,因为您不希望匹配标记分隔符。

答案 1 :(得分:0)

我没有php环境,但重点是快递不是吗?看到grep测试:

kent$  echo "'

<div class="tsts">CONTENT GOES HERE 1ENDENDENDENDEND<div class="tsts">CONTENT GOES HERE 2ENDENDENDENDEND <div class="tsts">CONTENT GOES HERE 3ENDENDENDENDEND
<div class="tsts">CONTENT GOES HERE 4ENDENDENDENDEND

'; 

"|grep -Po "(?<=<div class="tsts">)([\s\S]*?)(?=ENDENDENDENDEND)"     

CONTENT GOES HERE 1
CONTENT GOES HERE 2
CONTENT GOES HERE 3
CONTENT GOES HERE 4